JDK 1.8 ArrayList源码分析 关键代码
/**
* 1. ArrayList AbstractList中实现了List接口 冗余,作者已经承认
* 2. RandomAccess 可以随机访问,标记接口
*
**/
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
//默认的长度大小
private static final int DEFAULT_CAPACITY = 10;
//数组的数据
// transient 序列化会忽略,? 序列化的时候使用的element,writeObject的时候会重新复制。节省空间
transient Object[] elementData;
/**
* 集合的大小
*/
private int size;
/**
* 新的长度是旧的长度2倍
* * 扩容
*/
private void grow(int minCapacity) {
//旧的长度=元素的长度
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
//将旧数组的内容放到新数组中
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
* 1. ArrayList AbstractList中实现了List接口 冗余,作者已经承认
* 2. RandomAccess 可以随机访问,标记接口
*
**/
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
//默认的长度大小
private static final int DEFAULT_CAPACITY = 10;
//数组的数据
// transient 序列化会忽略,? 序列化的时候使用的element,writeObject的时候会重新复制。节省空间
transient Object[] elementData;
/**
* 集合的大小
*/
private int size;
/**
* 新的长度是旧的长度2倍
* * 扩容
*/
private void grow(int minCapacity) {
//旧的长度=元素的长度
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
//将旧数组的内容放到新数组中
elementData = Arrays.copyOf(elementData, newCapacity);
}
}