我有兩個來自java.util包的集合。最初幾個元素添加到它,然後刪除元素。我試圖理解這裏的兩件事。List和Set接口如何在Java中添加和刪除對象?
問題1:從集合中刪除元素是基於索引還是基於元素?下面的代碼是在eclipse中編譯和運行的。
List<Integer> list = new ArrayList<Integer>();
Set<Integer> set = new HashSet<Integer>();
for (int i = -3; i < 3; i++) {
list.add(i);
set.add(i);
}
//List = [-3, -2, -1, 0, 1, 2] Set =[-1, 0, -2, 1, -3, 2]
現在試圖從兩個集合中刪除元素:
for (int i = 0; i <= 2; i++) {
list.remove(i);
set.remove(i);
}
// Result is List = [-2, 0, 2] Set = [-1, -2, -3]
問題2:看看Java源的實現代碼移除元素。我如何理解下面的源代碼?
protected transient int modCount = 0;
private int size;
transient Object[] elementData;
private void fastRemove(int index) {
modCount++;
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,numMoved);
elementData[--size] = null;
}
什麼是不清楚的代碼?你有沒有在調試器中完成它?你有什麼不明白? –
是的,我檢查調試器。當在列表中添加一個元素時,它會被追加,並且在刪除它時從最後一個元素中移除,這意味着它正在調整數組列表的大小。我試圖理解爲什麼它返回-2,0,2。我瞭解Set的情況,因爲它刪除了對象而不是索引元素。 –
另外,我的問題給那些標記爲負面的人。我問錯誤的問題,人們是否認爲它是負面的? –