ArrayList

作者: crabApple1 | 来源:发表于2016-11-14 10:35 被阅读15次

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

相关文章

网友评论

      本文标题:ArrayList

      本文链接:https://www.haomeiwen.com/subject/mwrcpttx.html