标签:Java HashSet 对象 元素 equals 添加 数组 集合
2020/7/8
一、使用数组的缺点
1、数组初始化以后,长度就不可以变了,不便于扩展。
2、数组提供的属性、方法少,使用效率低。
3、数组存储数据的特点单一(有序、可重复)。
二、集合的分类
三、Collection接口的方法:
四、List接口中的方法
五、ArrayList源码分析:
1、jdk7底层创建长度是10的Object数组,容量不够了则1.5倍扩容,原数组复制到新数组。
2、Jdk8第一次调用add()时,底层才创建长度为10的数组,后续和jdk7无异。
六、HashSet的重点:
1、Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中,则添加操作失败。
2、HashSet(包括LinkedHashSet)判断两个元素相等的标准:两个对象通过hashCode()方法比较相等,并且两个对象的equals()方法判断也相等。
3、注意:对于存放在Set容器中的对象,该对象所属的类一定要重写equals()和hashCode()方法,以实现对象相等规则,即“相等的对象必须具有相等的散列码”。
4、HashSet中添加元素的过程,以添加元素a为例:
(1)调用对象a所在类的hashCode()方法,计算元素a的hash值。
(2)根据此hash值再通过某种散列函数决定对象a在HashSet底层数组中的存储位置(数组下标)。判断数组此位置上是否已经有元素了。
(3)如果没有其它元素,则元素a添加成功。
(4)如果已经有其它元素了(或者以链表形式存在的多个元素),则继续调用对象a所在类的equals()方法。equals()返回true则视为同一个元素,添加失败;返回false则不是同一个元素,则添加成功。
(5)注:在jdk7中,元素a放到数组中,指向原来的元素。
在jdk8中,原来的元素在数组中,指向元素a。
七、LinkedHashSet的特点
在HashSet的基础上,使用双向链表来维护添加元素的次序,使得元素看起来是以插入顺序保存的。
其插入性能略低于HashSet,但是在迭代访问Set里面的全部元素时具有很好的性能。
标签:Java,HashSet,对象,元素,equals,添加,数组,集合 来源: https://www.cnblogs.com/guan-zl/p/13266413.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。