您好,欢迎来到锐游网。
搜索
您的当前位置:首页ArrayList的扩容方式和扩容时机

ArrayList的扩容方式和扩容时机

来源:锐游网
ArrayList的扩容⽅式和扩容时机

初始化

ArrayList的底层是⼀个动态数组,ArrayList⾸先会对传进来的初始化参数initalCapacity进⾏判断如果参数等于0,则将数组初始化为⼀个空数组,

如果不等于0,将数组初始化为⼀个容量为10的数组。 扩容时机

当数组的⼤⼩⼤于初始容量的时候(⽐如初始为10,当添加第11个元素的时候),就会进⾏扩容,新的容量为旧的容量的1.5倍。扩容⽅式

扩容的时候,会以新的容量建⼀个原数组的拷贝,修改原数组,指向这个新数组,原数组被抛弃,会被GC回收。//ArraList初始化容量判断

public void ensureCapacity(int minCapacity) {

int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) 0 : DEFAULT_CAPACITY; if (minCapacity > minExpand) {

ensureExplicitCapacity(minCapacity); } }

//添加元素的⽅法

public boolean add(E e) {

ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; }

//判断是否需要扩容

private void ensureExplicitCapacity(int minCapacity) { modCount++;

// 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); 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); }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务