public ArrayList() {    // 无参构造函数,设置元素数组为空    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}
public ArrayList(int initialCapacity) {    if (initialCapacity > 0) { // 初始容量大于0        this.elementData = new Object[initialCapacity]; // 初始化元素数组    } else if (initialCapacity == 0) { // 初始容量为0        this.elementData = EMPTY_ELEMENTDATA; // 为空对象数组    } else { // 初始容量小于0,抛出异常        throw new IllegalArgumentException("Illegal Capacity: "+                                               initialCapacity);    }}
public ArrayList(Collection<? extends E> c) {    elementData = c.toArray();    if ((size = elementData.length) != 0) {        // c.toArray might (incorrectly) not return Object[] (see 6260652)        if (elementData.getClass() != Object[].class) //实现 Collection接口的类可能会重写toArray();方法,根据 String[].getClass()                                                         和 Object[].class 是不一样的, 可以知道有可能返回的就不是Object 数组, 就可                                                        以知道 (elementData.getClass() != Object[].class) 是有可能成立的。            elementData = Arrays.copyOf(elementData, size, Object[].class);    } else {        // replace with empty array.        this.elementData = EMPTY_ELEMENTDATA;    }}第一步,将参数中的集合转化为数组赋给elementData;第二步,参数集合是否是空。通过比较size与第一步中的数组长度的大小。第三步,如果参数集合为空,则设置元素数组为空,即将EMPTY_ELEMENTDATA赋给elementData;第四步,如果参数集合不为空,接下来判断是否成功将参数集合转化为Object类型的数组,如果转化成Object类型的数组成功,则将数组进行复制,转化为Object类型的数组。