import java.util.ArrayList;
import java.util.List;

/**
ArrayList源码分析:
  JDK7下:
    List list = new ArrayList();创建一个长度为10的Object[]数组,
        若此次添加导致容量不够,调用grow()扩容,默认扩容为1.5倍(扩容时还要复制到新的数组),如果事先知道总共要放的个数,调用有参构造函数效率更高。
 JDK8下:
    List list = new ArrayList();
    //private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
   //public ArrayList() {
   //        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
   //}
    无参构造时,this.elementData首先指向空,并不分配内存。add时再分配。

    List list = new ArrayList(3);
//  public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
            initialCapacity);
        }
    }
    有参构造时,直接分配内存。参数为0时,this.elementData指向private static final Object[] EMPTY_ELEMENTDATA = {};
   
    后续添加与扩容与JDK7无异
Vector创建容量为10的数组,默认扩容为原来的2倍,区别于ArrayList的1.5倍。
 */
public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(1);
    }
}

相关文章:

  • 2021-09-18
  • 2021-09-21
  • 2021-12-30
  • 2021-10-29
  • 2022-01-15
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-29
  • 2021-09-26
  • 2022-12-23
相关资源
相似解决方案