ArrayList的扩容机制
来源:互联网 发布:电脑农村淘宝 编辑:程序博客网 时间:2024/05/21 20:26
private
void
ensureCapacityInternal(
int
minCapacity) {
modCount++;
//定义于ArrayList的父类AbstractList,用于存储结构修改次数
// overflow-conscious code
if
(minCapacity - elementData.length >
0
)
grow(minCapacity);
}
private
void
grow(
int
minCapacity) {
// overflow-conscious code
int
oldCapacity = elementData.length;
int
newCapacity = oldCapacity + (oldCapacity >>
1
);
//新容量扩大到原容量的1.5倍,右移一位相关于原数值除以2。
if
(newCapacity - minCapacity <
0
)
newCapacity = minCapacity;
if
(newCapacity - MAX_ARRAY_SIZE >
0
)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
private
static
int
hugeCapacity(
int
minCapacity) {
if
(minCapacity <
0
)
// overflow
throw
new
OutOfMemoryError();
return
(minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
//MAX_ARRAY_SIZE和Integer.MAX_VALUE为常量,详细请参阅下面的注解
}
通过以上代码,我们可知java自动增加ArrayList大小的思路是:向ArrayList添加对象时,原对象数目加
1
如果大于原底层数组长度,则以适当长度新
建一个原数组的拷贝,并修改原数组,指向这个新建数组。原数组自动抛弃(java垃圾回收机制会自动回收)。size则在向数组添加对象,自增
1
。
阅读全文
0 0
- ArrayList的扩容机制
- ArrayList的扩容机制
- ArrayList的扩容机制
- ArrayList和Vector的扩容机制
- ArrayList和Vector的扩容机制
- ArrayList和Vector的扩容机制
- Java ArrayList的自动扩容机制
- ArrayList和Vector的扩容机制
- 关于ArrayList扩容机制
- ArrayList扩容机制
- ArrayList 原理、 扩容机制
- ArrayList动态扩容机制
- ArrayList扩容机制
- ArrayList简介及扩容机制
- 浅谈JAVA中HashMap、ArrayList、StringBuilder等的扩容机制
- ensureCapacity arraylist的扩容
- ArrayList的扩容
- ArrayList的扩容
- iOS第三方库汇总
- 17.Sentinel
- vmalloc size分析
- 滚动加载图片(懒加载)实现原理
- mac下的流氓mackeeper
- ArrayList的扩容机制
- android四大组件之BroadcastReceiver
- IntelliJ IDEA(2017)安装和破解
- 第五个Java程序,对字母进行大小写转换。
- 再谈java乱码:GBK和UTF-8互转尾部乱码问题分析
- python_week2_homework
- Java中文转拼音 直接获取首字母 用于字典排序 手机通讯录
- 微信小程序开发之五星评分
- 算法系列——和为S的连续正数序列