码迷,mamicode.com
首页 > 其他好文 > 详细

JDK源码 - ArrayList

时间:2018-01-10 18:40:38      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:stat   check   checked   swa   就是   tor   oid   clear   赋值   

/**
 * 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

标签:stat   check   checked   swa   就是   tor   oid   clear   赋值   

原文地址:https://www.cnblogs.com/liyong888/p/8259925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!