ArrayListHashMapHashSet扩容机制

Posted super尚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayListHashMapHashSet扩容机制相关的知识,希望对你有一定的参考价值。

ArrayList :

线性表存储
默认开辟大小为10的空间
当默认开辟空间不够的时候(比如此时需要add第11个元素),则以原数组的长度长度的1.5倍左右:

int newCapacity = oldCapacity + (oldCapacity >> 1),所以 ArrayList
每次扩容之后容量都会变为原来的 1.5 倍左右(oldCapacity 为偶数就是 1.5 倍,否则是 1.5 倍左右)! 奇偶不同,比如
:10+10/2 = 15, 33+33/2=49。如果是奇数的话会丢掉小数.

重新确定数组容量,然后将第11个元素添加进去,申请空间并赋值线程不同步(非线程安全):如果多个线程同时访问一个ArrayList实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步,所以为了保证同步,最好的办法是在创建的时候完成加锁,保证线程同步。

HashMap:
存储结构hash表类似于桶:线性表+链表+红黑树
默认初始化容量16,装载因子默认为0.75

HashSet
HashSet底层实现是hashMap
key 值比较 需要重写equals方法,重写hashcode方法
value static final PRESENT
扩容机制和hashMap一样 16,0.75
add的时候调用的是hashMap的put(key,PRESENT);方法。

以上是关于ArrayListHashMapHashSet扩容机制的主要内容,如果未能解决你的问题,请参考以下文章

ArrayListHashMapHashSet扩容机制

容器的同步控制与只读设置

linux系统标准分区如何扩容

区块链 链上扩容 链下扩容 Layer-2扩容

区块链 链上扩容 链下扩容 Layer-2扩容

centos7如何给home扩容空间