JDK源碼 - ArrayList
阿新 • • 發佈:2018-01-10
public sys 空數組 ngs swa style 元素 判斷 println
/** * 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