ArrayList底层原理源码分析

 我来答
户如乐9318
2022-07-25 · TA获得超过6661个赞
知道小有建树答主
回答量:2559
采纳率:100%
帮助的人:140万
展开全部

ArrayList是用数组实现的,并且它是动态数组,也就是它的容量是可以自动增长的,看下面的类声明可知道它实现了众多接口,比如List,RandomAccess,Serializable,Cloneable

ArrayList底层本质上是一个数组,用该数组来保存数据

transient :Java关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。

接下来看 ensureExplicitCapacity() ,

实际上扩容的方法grow()

1.5倍的神秘规律:因为一次性扩容太大(例如2.5倍)可能会浪费更多的内存
1.5倍:最多浪费33%
2.5倍:最多会浪费60%
3.5倍:则会浪费71%
但是一次性扩容太小,需要多次对数组重新分配内存,对性能消耗比较严重。 所以1.5倍刚刚好 ,既能满足性能需求,也不会造成很大的内存消耗。

未完

未更新

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式