hashset 在jdk1.7和1.8中的存储原理
时间: 2023-12-01 18:49:51 浏览: 137
对java基础集合部分(List、HashMap、HashSet、ArrayList等)底层源码的分析与总结
5星 · 资源好评率100%
在 JDK 1.7 中,HashSet 内部使用的是数组加链表的数据结构。当元素被添加到 HashSet 中时,首先计算元素的 hash 值,根据该值找到对应的数组索引位置,如果该位置没有元素,则直接添加到该位置;如果该位置已经有元素,则通过链表的形式将新元素添加到该位置的链表末尾。当链表长度达到一定阈值(默认为 8)时,链表会转换为红黑树。
在 JDK 1.8 中,HashSet 内部使用的数据结构发生了变化。当元素被添加到 HashSet 中时,首先计算元素的 hash 值,然后通过一定的算法(位运算)得到元素在数组中的索引位置。如果该位置没有元素,则直接添加到该位置;如果该位置已经有元素,则通过开放地址法(线性探测)寻找下一个可用的位置。当数组中元素的个数达到一定阈值(默认为 0.75 倍的数组容量)时,HashSet 会进行扩容操作,扩容后的数组大小为原来的两倍。
阅读全文