扩容过程
一、加入节点数达到临界值
每加入一个节点Node(k,v,h,next),size就会+1,所以当加入的元素到达临界值threshold时,就会扩容
二、其中一条链表元素数量>=8
- 因为所有A类元素hashcode值相同,所以会被加入同一个链表
- 再加入8个元素之后,再加入第九个元素,table表会扩容为原来两倍,即32
- 再加入第九个元素,继续扩容,为64
- 再加入第10个元素时,因为此时的table表已经满足了容量>=64,且单条链表元素>=8,所以会进行树化,将table表化为红黑树
package aggregate.setClass;
import java.util.HashSet;
public class HashSetIncrement {
public static void main(String[] args) {
//测试HashMap的扩容过程
//因为所有A类元素hashcode值相同,所以会被加入同一个链表
//再加入8个元素之后,再加入第九个元素,table表会扩容为原来两倍,即32
//再加入第九个元素,继续扩容,为64
//再加入第10个元素时,因为此时的table表已经满足了容量>=64,且单条链表元素>=8,所以会进行树化,将table表化为红黑树
HashSet hashSet = new HashSet();
for (int i = 0; i <12; i++) {
hashSet.add(new A(i));
}
}
}
//创建一个A类,使其所有元素返回的hashcode值固定
class A{
private int i;
public A(int i) {
this.i = i;
}
@Override
public int hashCode() {
return 100;
}
}