Java中集合框架的扩容总结

文章为自己的简单理解,其他细节就不展开了。(懒)

目录

前言

一、集合框架图

二、ArrayList以及Vector和Stack的扩容分析

1.源码分析

1.1ArrayList的源码分析

1.2vector的源码分析

1.3stack的源码分析

2.结论

三、HashMap,HashSet,Hashtable,ConcurrentHashMap的扩容分析

1.源码分析

1.1hashmap源码分析

1.2hashset源码分析

1.3hashtable源码分析

1.4concurrenthashmap源码分析

2.结论

总结


前言

java中集合的底层扩容机制可能会在面试中被提问到,尤为重要


一、集合框架图

图中体现了单列集合以及双列集合的接口实现和继承关系

二、ArrayList以及Vector和Stack的扩容分析

1.源码分析

1.1ArrayList的源码分析

图中可以看出该集合的初始容量为10

这是扩容方法,扩容为原来的1.5倍

1.2vector的源码分析

该集合的初始容量为10

扩容为原来的2倍

1.3stack的源码分析

因为stack继承于vector类,所以,底层扩容和vector相似

2.结论

arraylist集合的初始容量为10,扩容为原来的1.5倍

vector集合的初始容量为10,扩容为原来的2倍

stack同vector

三、HashMap,HashSet,Hashtable,ConcurrentHashMap的扩容分析

1.源码分析

1.1hashmap源码分析

hashmap的数组初始容量为16,当链表中的元素达到8并且数组容量大于64时转换为红黑树,元素为6时自动解体为链表

hashmap扩容为原来的2倍

1.2hashset源码分析

hashset是基于hashmap实现的,所以同上

1.3hashtable源码分析

该集合初始容量为11

扩容为原来的2倍+1

1.4concurrenthashmap源码分析

初始容量为16

扩容机制与hashmap基本相似

2.结论

hashmap,hashset,concurrenthashmap的初始容量为16,扩容机制:数组初始容量为16,当链表中的元素达到8并且数组容量大于64时转换为红黑树,元素为6时自动解体为链表

扩容为原来的2倍

hashtable初始容量为11,扩容为原来的2倍+1


总结

以上就是对java中集合底层扩容机制的一点点内容,哈哈

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值