Set接口
特点1:无序,存储的元素与添加顺序无关
特点2:不可重复(使用元素的equals方法来判定是否重复)
特点3:能存储null元素,只能存储一次。
Hash算法机制
Set集合在添加或查看元素时,当集合中的元素过多时,就会进行多次的比较,效率变低。为了提高效率,在设计元素类型时,提供hash算法,用于返回对象的一个int值。在内存中开辟很多小的区域,用于存储一定范围返回值的对象。
当我们想添加元素或查看元素时,先计算此元素的返回值,然后去相应区域中查找遍历,
如果在这个区域没有找到对象,说明集合中可以存储这个对象。如果有,然后查看两个对象的equals的返回值。
equals返回值为true,不能添加
equals返回值为false,可以添加,添加至对应的单向链表结构中(尽可能的避免发生)
Set接口派生出的子类
HashSet:通过实现hash算法的一种数据结构,无序,不重复。增加/删除时效率高。
LinkedHashSet:通过实现hash算法的一种数据结构,但是通过链表来维持顺序。
顺序与添加顺序一致,在查看检索时效率比较高。
TreeSet:是SortedSet子接口的实现类,使用二叉树的数据结构存储数据并维护元素的顺序。
Set集合的遍历
因为Set集合是无序的,无下标可言,因此不能使用经典for循环。我们可以使用迭代器原理。
(1)调用集合的iterator()获取迭代器
(2)使用foreach循环