zoukankan      html  css  js  c++  java
  • ArrayList1.8

    ArrayList是继承自List接口的动态数组,允许null元素,不允许并发。

    ArrayList的构造方法有三种:

       1.第一种是无初始化值,默认容量会赋值为10。

    1  /**
    2      * Constructs an empty list with an initial capacity of ten.
    3      * 构造一个空的list,会在添加元素的时候给list的容量赋值或者扩容,(初始容量为10)
    4      */
    5     public ArrayList() {
    6         this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; //elementData是一个Object类型的空数组
    }

       添加一个元素:

     1 /**
     2      * Appends the specified element to the end of this list.
     3      * list添加一个元素
     4      *
     5      * @param e element to be appended to this list
     6      * @return <tt>true</tt> (as specified by {@link Collection#add})
     7      */
     8     public boolean add(E e) {
     9         ensureCapacityInternal(size + 1);  // Increments modCount!!
    10         elementData[size++] = e;  //添加元素
    11         return true;
    12     }

    在添加元素之前,用ensureCapacityInternal(size + 1)先进行判断,如果加入该元素以后,容量大于了内部存储元素的数组的大小,就对该数组进行扩容。

       扩容:

     1 /**
     2      * Increases the capacity to ensure that it can hold at least the
     3      * number of elements specified by the minimum capacity argument.
     4      *
     5      * @param minCapacity the desired minimum capacity
     6      */
     7     private void grow(int minCapacity) {
     8         // overflow-conscious code
     9         int oldCapacity = elementData.length;
    10         int newCapacity = oldCapacity + (oldCapacity >> 1);
    11         if (newCapacity - minCapacity < 0)
    12             newCapacity = minCapacity;
    13         if (newCapacity - MAX_ARRAY_SIZE > 0)
    14             newCapacity = hugeCapacity(minCapacity);
    15         // minCapacity is usually close to size, so this is a win:
    16         elementData = Arrays.copyOf(elementData, newCapacity);
    17     }

    从代码中可以看出,扩容的方式是int newCapacity = oldCapacity + (oldCapacity >> 1); 也就是说扩容的大小是原来容量的一半,新的容量大小是原来的3/2。扩容好以后进行元素的搬迁。

  • 相关阅读:
    【Codeforces 933A】A Twisty Movement
    【Codeforces 996B】World Cup
    【Codeforces 469B】Chat Online
    鼠标点击后的CSS3跑马灯效果
    CSS的相对定位和绝对定位
    CSS3制作的一款按钮特效
    单元测试小结
    JS对输入判断变化屏蔽中文输入法输入时连续触发事件的方法
    jquery的load方法
    MVC视图特性
  • 原文地址:https://www.cnblogs.com/xp1234/p/13279354.html
Copyright © 2011-2022 走看看