申请会员ID:Boen_
1、申 请 I D :Boen_2、个人邮箱:1836140285@qq.com
3、原创技术文章:详细分析java中List接口的实现类ArrayList实现方法
话不多说,直奔主题。
查看ArrayList部分源代码(因其太多,只展示必要部分):
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()方法的时候,查看底层源代码:
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
发现数组长度即将发生变化--变为10!可是如果使用add方法输入的不止10个,是又如何装下的呢?
继续查询源代码: 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类型的数组,因此将会有数组的特性---查询修改快,添加删除慢。
其方法我在此就不说了,因为很简单!
抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
页:
[1]