public class HashSetIncrement {
public static void main(String[] args) {
/*
HashSet底层是HashMap,第一次添加是时,table数组扩容到16,(加载因子是0.75)
临界值(threshold)是16*0.75=12,如果到达了临界值12,就会扩容到16*2=32 此时临界值32*0.75=24........以此类推
*/
HashSet hashSet = new HashSet();
for (int i = 0; i <= 100; i++) {
hashSet.add(i);
}
}
通过Debug可以看出table具体的实时大小如图
此时当for循环跑了12次以上也就是i=12的时候,扩容为32,以此类推..
二
public class HashSetIncrement {
public static void main(String[] args) {
/*
在Java8中,如果一条链表的元素个数到达TREEIFY_THRESHOLD(默认是8)
并且table的大小>=MIN_TREEIFY_CAPACITY(默认是64),就会进行树化(红黑树)
否则仍采用数组扩容机制
*/
for (int i = 1; i <= 12; i++) {
hashSet.add(new A(i));
}
System.out.println("hashset="+hashSet);
}
}
class A{
private int n;
public A(int n) {
this.n = n;
}
@Override
public int hashCode() {
return 100;
}
}