package com.jettyw.arraylist;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
*
* @author jettyw
* 2017-05-25
* 使用Collection作为参数创建对象
*/
public class ArrayListConstructorTest {
public static void main(String[] args) {
//创建一对象
Collection<String> collection=new ArrayList<String>();
//如果不传参数,传入的collection长度为0
//collection.add("2222");
List<String> list=new ArrayList<String>(collection);
list.add("1111");
}
}
接着看构造方法。这个和传入整形参数的构造方法有点类似
public ArrayList(Collection<? extends E> c) {
//将集合转换为数组,直接赋值为elementData
elementData = c.toArray();
//如果size!=0
if ((size = elementData.length) != 0) {
//如果类型不正确,转换为正确的类型
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
//否则赋值为空数组
this.elementData = EMPTY_ELEMENTDATA;
}
}
接下来的流程就和前面的流程一样了,为空数组时和传入整形参数为0时情况一模一样,否则根据流程确定是否扩展数组,以及扩展之后数组的大小。这里不再详细的贴代码。因为相同的代码已经贴了几次了。