一路向北 发表于 2019-2-27 17:12

申请会员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类型的数组,因此将会有数组的特性---查询修改快,添加删除慢。
其方法我在此就不说了,因为很简单!


Hmily 发表于 2019-2-28 10:18

抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
页: [1]
查看完整版本: 申请会员ID:Boen_