java源码笔记
注:源码学习是一个长久的过程,目前有的程序还模糊,相信自己以后会明白的
1.ArrayList
ArrayList是由长度可变的数组组成的,允许null值,与Vector相类似,该类的方法不同步
size、empty、get、set、iterator等为常数时间,add方法是一个O(n)的时间复杂度
与linkedList相比较常数因子比较低,有一个初始的容量,列表元素至少和数组一样,
可自动扩容grow()
2.继承与实现关系
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
//初始大小10,用户可以手动指定
private static final int DEFAULT_CAPACITY = 10;
//底层使用Object数组实现
//底层的扩容函数,扩容为原来的1.5倍
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
//新数组的长度=旧数组的长度+旧数组长度右移一位(相当于除以2)
//新数组长度是旧数组的1.5倍
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);
}
}