- 1.无序性:不等于随机性。存储的数据在数组中并非按照数组索引的顺序添加,根据数据的哈希值添加
*- 2.不可重复性:保证添加的元素按照equals()判断时,不能返回true,即:相同的元素只能添加一次
- 二。添加元素过程:以hashSet为例:
-
向HashSet中添加元素时,首先调用元素a的hashcode方法,计算其哈希值,
-
此哈希值对底层数组长度进行取模求其存放的位置,判断此位置是否有元素:
-
如果没有其它元素,则元素a添加成功
-
如果有其它元素(有可能是单个元素或是以链表形式存在的多个元素),则比较元素a与该位置的其它元素hash值:
-
如果hash值不同,则元素a添加成功
-
如果hash值相同,进而去调用equals方法去比较:
-
如果equals方法返回true,则元素a添加失败
-
如果equals方法返回false,则元素a添加成功
-
注意:如果元素a添加成功且该位置已有其它元素,则在其添加位置以链表方法存储
-
jdk7:a放在数组中,指向原有的元素
-
jdk7:原有的元素放在数组中,指向a
-
HashSet底层:数组+链表(jdk7)
- 向HashSet中添加数据时一定要重写hashcode和equals方法
- 向TreeSet中添加数据时,必须数相同类的对象,需要实现Comparable接口
Java基础-集合:set
本文详细解析了无序的哈希集合(如HashSet)和有序的TreeSet中元素的添加过程,重点介绍了哈希值计算、冲突解决(单链表法)、equals方法应用,以及数据结构底层的数组+链表实现。同时强调了重写hashcode和equals方法的重要性。
摘要由CSDN通过智能技术生成