1、申 请 I D :Boen_
2、个人邮箱:1836140285@qq.com
3、原创技术文章:详细分析java中List接口的实现类ArrayList实现方法
话不多说,直奔主题。
查看ArrayList部分源代码(因其太多,只展示必要部分):
[Java] 纯文本查看 复制代码 public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
可见其创建对象即new的时候为Object类型的数组,并且为空。那这个数组是如果装下东西的呢?
在使用add()方法的时候,查看底层源代码:
[Java] 纯文本查看 复制代码 private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
发现数组长度即将发生变化--变为10!可是如果使用add方法输入的不止10个,是又如何装下的呢?
继续查询源代码:[Java] 纯文本查看 复制代码 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);
}
原来如此:如果输入的不止10个的话,将会向右移一位,长度变为15。若是再不够,继续向右移动一位!
因为ArrayList实现类底层是一个Object类型的数组,因此将会有数组的特性---查询修改快,添加删除慢。
其方法我在此就不说了,因为很简单!
|