JDK源码 - ArrayList

Posted kevin.li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK源码 - ArrayList相关的知识,希望对你有一定的参考价值。

/**
 * 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)扩容
    }
}

  

以上是关于JDK源码 - ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

JAVA——底层源码阅读——集合ArrayList的实现底层源码分析

JDK源码ArrayList 源码分析

源码解读:ArrayList源码解析(JDK8)

深入ArrayList源码分析(JDK1.8)

JDK源码分析-ArrayList分析

JDK源码 - ArrayList