位置访问操作
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;