建议看完这两篇文章,再观看此文
Java面试重点–HashSet底层代码全面解析(1)
Java面试重点–HashSet底层代码全面解析(2)
先说明HashSet扩容和转成红黑树机制结论
1、HashSet扩容结论
HashSet底层是Hashmap即数组+链表,添加元素时,table数组扩容为16,加载因子为0.75,所以临界值为16 * 0.75 = 12,意思是添加12个元素后,table数组将继续扩容至原来的2倍即32,临界值也会变为32 * 0.75 = 24,以此类推。
2、HashSet转成红黑树机制结论
当一条链表的元素得到8个之后,并且table数组的大小达到64,链表就转成红黑树,如果table数组未到64,table数组将扩容至原来的2倍,直至大小达到64链表转成红黑树为止。
分析HashSet扩容底层源码
举一个例子:在HashSet集合中添加20个元素
import java.util.HashSet;
public class HashSet_ {
public static void main(String[] args) {
HashSet hashSet = new HashSet();
for (int i = 1; i <= 20; i++) {
hashSet.add(i);
}
System.out.println(hashSet);
}
}
添加第一个元素
1、Debug进入add方法
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
2、进入put方法
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
3、进入putVal方法
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,<