0
点赞
收藏
分享

微信扫一扫

HashSet的扩容和转成红黑树机制

程序小小黑 2022-01-04 阅读 42
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;
    }
}
举报

相关推荐

0 条评论