本文共 936 字,大约阅读时间需要 3 分钟。
容器类底层的数据结构大多使用数组,我们知道数组是不能动态修改它的size,假如非要修改的话,只要初始化另外一个更大容量的数据,并将原来的数据复制过去。对容器类的插入操作,首先就得check是否容量满足,如不满足先扩展
public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; }private void ensureCapacityInternal(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);//扩展为原来容量的1.5倍 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);//复制操作
转载地址:http://pmdmi.baihongyu.com/