ArrayList有一個有參構造方法
public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) { this.elementData = EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); } }
也就是我們實例化ArrayList時可以這樣寫:
ArrayList<String> list = new ArrayList<String>(30);
我第一反應是list的初始長度為30,因此我寫了這樣一條代碼:
list.set(0,"first");
結果卻報了這么一個異常
於是我調用size()方法,返回的結果是:
size = 0
也就是說,該構造方法並不是將ArrayList()初始化為指定長度,而是指定了其內部的Object數組的長度,也就是其容量。因此,當我們調用size()時,返回的是其實際長度,而非容量大小,同時,對超出ArrayList長度的部分進行訪問或賦值操作時也會造成訪問越界,盡管它的容量大小足夠