/**
* ArrayList源码分析
* @author liyong
*
*/
public class Util {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List list = new ArrayList<>();
//① add(E)
//ArrayList类有一个属性 -> transient Object[] elementData;
//创建对象就是 给elementData 赋值
list.add(1);
// 添加第一个元素时,会进行判断,如果elementData没有位置,会分配10个位置,然后将元素加入到elementData
list.add(2);
// 添加的第二个元素时,同样会判断,如果分配的位置索引小于添加进去的索引值,则会将elementData数组扩容,
// int newCapacity = oldCapacity + (oldCapacity >> 1); 略等于1.5倍扩容,扩容之后在添加
// 每次添加是如何进行判断的呢?
// 1 elementData == {} 判断elementData是否是空数组,如果是,minCapacity = 10
// 如果新索引值 > elementData.length,进行某方法 : 就是生成新的数组(无论是扩容还是第一次添加)
// modCount记录elementData的个数
//② add(index,E) 跟上面类似,只是在指定的索引处添加值
// list.add(5, 5);
//③ 其他add看看得了
//list.addAll(c)
Iterator ir = list.iterator(); //返回的是Itr对象 -> ArrayList里面的一个内部类
while(ir.hasNext()){
System.out.println(ir.next());
}
int size = list.size();
list.clear();
list.contains(1);
list.containsAll(new ArrayList());
// 总结 : 看懂了70%吧,ArrayList底层是数组,初始长度10,当添加的数据过长后会扩容,按照这个算法(>> 1)扩容
}
}