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扩容机制的主要内容,如果未能解决你的问题,请参考以下文章