位置訪問操作

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);

注意:

  1. 新增和刪​​除列表元素會修改列表,如果同時迭代列表,這可能會導致 ConcurrentModificationException

  2. 新增和刪​​除元素可以是 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;