1、基本机构
private transient Object[] elementData; //用来存储集合元素的数组
private int size; //保存集合的元素数目
2、扩容机制
在容量达到极限的时候扩容,每次扩容原来的1/2(右移一位),默认初始容量为10
由于没有直接保存数组容量的属性,就需要借助反射机制来查看集合的容量,如下:
List<String> aa = new ArrayList<String>();
aa.add("1");
...
aa.add("11");//10: 1010 -> 1010 + 0101 = 1111 15
...
aa.add("16");//15: 1111 -> 1111 + 111 = 10110 22
Class c=aa.getClass();
Field f=c.getDeclaredField("elementData");
f.setAccessible(true);//取消默认 Java 语言访问控制检查的能力
Object[] o=(Object[])f.get(aa);
System.out.println(o.length);//结果是15
3、辅助函数简介:
ensureCapacity(int minCapacity)//手动扩容,避免多次扩容
4、特点
(1)迭代器快速失败
(2)不同步(Collections.synchronizedCollection(list);)