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