HashSet的存储机制:
- 底层用一个数组存放元素,而且数组的长度永远是2的n次方,如果传入数组的长度不是2的n次方,hashset会自动的将其扩展到2的n次方;
- HashSet的构造器:
HashSet(int initialCapacity, float loadFactor) //initialCapacity——控制底层数组长度 //loadFactor——当HashSet感觉到底层快要满的时候(0.75),会将底层数组容量扩充1倍, //原来的数组就变成垃圾,等待回收,即rehash(重hash) //说明:当LoadFactor为0.75时,75%的桶已满,HashSet会分配新的数组;LoadFactor越小, //越消耗内存;LoadFactor越大,性能越低 //数组越满,才回去“重hash”,越有可能出现链表
- HashSet的存入机制:
- 当有元素加进来的时候,HashSet会调用该对象的HashCode()方法,得到一个int值;
- 根据HashCode()返回的int值,计算出它在HashSet【底层数组】的存储位置(数组中的索引);
- 如果要加入的位置没有元素(是空的),直接放入即可;
- 如果要加入的位置已经有元素,此处就会形成“链表”
- HashSet的取元素机制:
- 当我们要取一个元素时,HashSet会调用该对象的HashCode()方法,得到一个int值;
- 根据HashCode()返回的int值,计算出它在HashSet的存储位置(数组中的索引);
- 如果该位置恰好是要找的元素,直接取出即可;
- 如果该位置有链表,HashSet要“挨个”搜索链表里的元素
说明:在最理想的情况下,HashSet的性能几乎可以数组匹敌,存、取的性能非常高
- HashSet认为两个对象相等的条件:
- 两个对象的HashCode()的返回值相等;
- 两个对象通过equals比较也返回True
Java之HashSet功能用法详解,存储机制和性能分析
猜你喜欢
转载自blog.csdn.net/qq_38358499/article/details/100631653
今日推荐
周排行