ArrayList底层原理源码分析
1个回答
展开全部
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倍刚刚好 ,既能满足性能需求,也不会造成很大的内存消耗。
未完
未更新
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询