Set接口继承Collection接口,而且他不允许集合中存在重复项,每个具体的Set实现类依赖添加的对象的equals()和hashCode()方法来检查独一性。它常用的具体实现有HashSet和TreeSet类。Set接口没有引入新的方法,跟Collection一样,只是行为不同。

        HashSet能快速定位一个元素,但放到其中的对象需要实现hashCode()方法。该结构使用散列表进行存储,用散列码确定唯一的一个值。在实际程序中,有很多时候不能直接比较,特别是自定义的类,这是需要重写equals()、hashCode()、toString()方法。其实任何一个好的编程员,在编程的时候都应该重写这三个方法,但String类除外,因为它已经覆盖了这三个方法。可以用for-each输出,但是输出的顺序是不一定的。

        TreeSet使用树结构来进行存储Set接口的实现类,对象按升序存储,访问和检索速度快。需要注意的是,在实际中的类并不一定相同,需要继承Comparable接口,重新了compareTo()方法,不然就不能自动调用Collections.sort()方法。他是排序输出。

       Map是一种把键对象和值对象进行关联的容器,它容器中的见对象时不能重复的。它提供了Map.Entry接口,通过entrySet方法返回实现Map.Entry接口的对象集合。这样让Map可以转化成Set,再转化成Iterator,就可以迭代输出了。