ArrayList、HashMap、HashSet扩容机制

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);方法。

你可能感兴趣的:(java,数据结构,开发语言)