Java集合系列(二)ArrayList详解

  

  

ArrayList是通过一个数组来实现的,因此它是在连续的存储位置存放对象的引用,只不过它比数组更智能,能够根据集合长度进行自动扩容。

  

假设让我们来实现一个简单的能够自动扩容的数组,我们最容易想到的点就是:

  
      <李> add()的时候需要判断当前数+ 1组大小是否等于此时定义的数组大小,李   <李>若小于直接添加即可,否则,需要先扩容再进行添加。   
  

实际上,ArrayList的内部实现原理也是这样子,我们可以来研究分析一下ArrayList的源码

  

     /* *   *添加指定的元素的列表。   *   * @param e元素附加到这个列表   * @return & lt; tt> true</tt>(按照{@link收集#添加})   */公共逻辑加(E E) {   ensureCapacityInternal(+ 1)大小;//进行扩容校验   elementData(大小+ +)=e;//将值添加到数组后面,并将尺寸+ 1   返回true;   }/* *   * ArrayList的元素的数组缓冲区存储。   * ArrayList的容量是这个数组的长度缓冲区。任何   *空ArrayList elementData=https://www.yisu.com/zixun/=DEFAULTCAPACITY_EMPTY_ELEMENTDATA   *将扩展到DEFAULT_CAPACITY当第一个元素被添加。   */瞬态对象[]elementData;//采用简化嵌套类访问      私人空间ensureCapacityInternal (int minCapacity) {   ensureExplicitCapacity (calculateCapacity (elementData minCapacity));//elementData数组   }/* *   *默认初始容量。   */私有静态最终int DEFAULT_CAPACITY=10;/* *   *共享空数组实例用于默认大小的空实例。我们   *区分从EMPTY_ELEMENTDATA知道膨胀的时候   *第一个元素被添加。   */私有静态最终对象[]DEFAULTCAPACITY_EMPTY_ELEMENTDATA={};//返回最大的索引   私有静态int calculateCapacity (Object [] elementData, int minCapacity) {   如果(elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA){//与空数组实例对比   返回数学。马克斯(DEFAULT_CAPACITY minCapacity);   }   返回minCapacity;   }            私人空间ensureExplicitCapacity (int minCapacity) {   modCount + +;//overflow-conscious代码   如果(minCapacity - elementData。长度> 0)   成长(minCapacity);   }      

扩容调用方法,实际也就是数组复制的过程

     /* *   *增加的能力,以确保它可以容纳至少   *最低容量参数指定的元素数量。   *   * @param minCapacity所需的最小容量   */私人空间增长(int minCapacity) {//overflow-conscious代码   int oldCapacity=elementData.length;   int newCapacity=oldCapacity + (oldCapacity祝辞祝辞1);   如果(newCapacity - minCapacity & lt;0)   newCapacity=minCapacity;   如果(newCapacity - MAX_ARRAY_SIZE祝辞0)   newCapacity=hugeCapacity (minCapacity);//minCapacity通常是接近的大小,这是一个胜利:   elementData=https://www.yisu.com/zixun/Arrays.copyOf (elementData newCapacity);   }      

     /* *   *插入指定元素在指定的位置   *列表。变化的元素目前位置(如果有的话)   *任何后续元素向右(添加alt=癑ava集合系列(二)ArrayList详解">

  

以上所述是小编给大家介绍的Java集合系列ArrayList详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

Java集合系列(二)ArrayList详解