Java集合类-ArrayList分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合类-ArrayList分析相关的知识,希望对你有一定的参考价值。
ArrayList的特点
可以动态扩容
非线程安全
支持序列化
线程安全的List Collections.synchronizedList、CopyOnWriteArrayList
成员变量
private static final int DEFAULT_CAPACITY = 10; // 初始大小
transient Object[] elementData; // 存储元素的数组
private int size; //容器大小
基本方法
增 add
public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; }
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
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);
}
删 remove
改 set
查 get
ArrayList扩容原理
如果新加入元素后数组容量不够需要进行扩容,执行grow方法
默认扩容为之前的1.5倍,如果容量不够则直接扩充为加入当前元素后的大小
然后利用Arrays.copyOf进行数组的复制
相关类和方法
Arrays.copyOf()
System.arraycopy()
public static native void arraycopy(
Object src,
int srcPos,
Object dest,
int destPos,
int length
);
以上是关于Java集合类-ArrayList分析的主要内容,如果未能解决你的问题,请参考以下文章