位置訪問操作
List API 有八種位置訪問操作方法:
add(T type)
add(int index, T type)
remove(Object o)
remove(int index)
get(int index)
set(int index, E element)
int indexOf(Object o)
int lastIndexOf(Object o)
所以,如果我們有一個 List:
List<String> strings = new ArrayList<String>();
我們想要新增字串 Hello World!
和“再見世界!” 對它來說,我們會這樣做:
strings.add("Hello world!");
strings.add("Goodbye world!");
我們的列表將包含兩個元素。現在我們假設我們要新增“程式啟動!” 在列表的前面。我們會這樣做:
strings.add(0, "Program starting!");
注意:第一個元素是 0
現在,如果我們想要刪除再見世界! 我們可以這樣做:
strings.remove("Goodbye world!");
如果我們想刪除第一行(在這種情況下將是“程式啟動!”,我們可以這樣做:
strings.remove(0);
注意:
-
新增和刪除列表元素會修改列表,如果同時迭代列表,這可能會導致
ConcurrentModificationException
。 -
新增和刪除元素可以是
O(1)
或O(N)
,具體取決於列表類,使用的方法以及是在列表的開頭,結尾還是中間新增/刪除元素。
為了在指定位置檢索列表元素,你可以使用 List API 的 E get(int index);
方法。例如:
strings.get(0);
將返回列表的第一個元素。
你可以使用 set(int index, E element);
替換指定位置的任何元素。例如:
strings.set(0,"This is a replacement");
這將設定字串 This is a replacement
作為列表的第一個元素。
注意:set 方法將覆蓋位置 0 處的元素。它不會在位置 0 處新增新 String 並將舊字串推送到位置 1。
int indexOf(Object o);
返回作為引數傳遞的第一次出現的物件的位置。如果列表中沒有出現該物件,則返回 -1 值。如果你呼叫,繼續上一個例子:
strings.indexOf("This is a replacement")
當我們在列表的位置 0 設定字串 This is a replacement
時,預計會返回 0。如果在呼叫 int indexOf(Object o);
時列表中出現多個事件,則如上所述將返回第一次出現的索引。通過呼叫 int lastIndexOf(Object o)
,你可以檢索列表中最後一次出現的索引。因此,如果我們新增另一個這是替代品:
strings.add("This is a replacement");
strings.lastIndexOf("This is a replacement");
這次 1 將返回而不是 0;