ArrayList,
分享于 点击 5408 次 点评:28
ArrayList,
由上文可知,List集合类中有4种具体实现,其中ArrayList是最为猿所知的!
1 初始化
private transient Object[] elementData;
public ArrayList() {
this(10);
}
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);
this.elementData = new Object[initialCapacity];
}
从JDK源码可知,ArrayList实现基础构建于数组对象Object[] elementData
,用于数据对象的承载;
2 数据操作
public E get(int index) {
RangeCheck(index);
return (E) elementData[index];
}
public boolean add(E e) {
ensureCapacity(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
public E remove(int index) {
RangeCheck(index);
modCount++;
E oldValue = (E) elementData[index];
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
return oldValue;
}
- 在查找元素时,由于采用数组实现可以直接使用
elementData[index]
快速获取数据元素;- 在插入时,ArrayList容器都需要先去检查
ensureCapacity()
,当前数组长度是否满足插入元素,若不满足,直接生成一个新的数组对象替换原来旧的数组对象;由于ArrayList使用数组对象其消耗的内存是JVM堆内存,当对一个ArrayList对象进行频繁性溢出操作时将产生大量无效对象,消耗大量JVM堆内存,为JVM性能带来一定的损失;- 在删除操作时,ArrayList每次都是直接生成一个新的数组对象,其所带来的影响也同上;
相关文章
- 暂无相关文章
用户点评