Set:
特点1:无序,存储的元素顺序与添加顺序无关
特点2:不可重复(使用元素的equals()方法判定是否重复),
特点3:能存储null元素,只能存储一次
Hash算法机制:
Set集合在添加查看元素时,当集合中的元素过多时,就会进行多次比较,效率变低,为了提高效率,在设计元素类型时,提供hash算法,用于返回对象的一个int值,在内存中开辟了很多小的区域,用于存储一定范围返回值的对象。当添加或查看元素时,先计算此元素的返回值,然后在相应的区域中遍历查找,如果在这个区域没有找到对象,说明可以添加这个对象;如果有,查看两个对象的equals的返回值,返回true,不能添加;返回false,可以添加,添加至对应的链表结构中(尽可能避免发生)
HashCode方法:
Object是引用类型的父类,提供了hashCode()方法和equals()方法,因此在定义类型时一般重写hashCode()和equasl()
重写HashCode方法:
重写规则:尽可能让所有的成员变量都参与运算,尽可能避免出现hash值碰撞
重写的必要性:
(1)如果重写了equals(),有必要重写hashCode方法
(2)如果equals()返回true,hashCode返回值有必要相同
(3)如果equals()返回false,hashCode返回值不一定相同(不同可提高检索效率)
Set集合的遍历
因为set集合是无序的,无下标,因此不能使用经典for循环,可以使用迭代器原理
(1)调用集合的Iterator()获取迭代器
(2)使用foreach循环
Set集合的元素:
不能轻易修改参与hash值算法的成员变量,否则容易引起内存溢出
原因:成员变量修改后,会出现新的hash值,但是存储位置还在原hash值的位置上,因此操作时找不到具体的存储位置
子类:
HashSet:通过实现hash算法的一种数据结构,无序、不重复
LinkedHashSet:通过实现hash算法的一种数据结构,通过链表来维持顺序,顺序与添加顺序一致
TreeSet:使用二叉树的一种数据结构,顺序与自然排序有关系,支持定制排序
java-se-集合之Set
最新推荐文章于 2021-10-12 20:00:55 发布