ArrayList

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);)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容