List
是一种有序的容器(也被称为序列)。用户可以精确地控制每一元素在list中的插入位置。用户可以通过元素的索引获得该元素并且搜索list中的元素。
不同于set,list允许重复的元素。
List接口在Collection接口之外对iterator,add,remove,equals,hashCode方法增加了额外的规定。
List接口提供了四种通过索引获取元素的方法。这些操作的执行的时间可能与索引值成比例(比如LinkedList)。因次当调用者不知道方法的具体实现时,最好通过索引迭代所有元素。
List接口提供了一种特别的迭代器:ListIterator,它除了Iterator接口提供的常规操作外还允许元素的插入、替换和双向获取。有一种方法可以获取从list某一特定位置开始的迭代器。
List接口提供了两种方法搜索特定的对象。从性能角度看,这些方法应当谨慎使用。在很多实现中,它们都执行大代价的线性搜索。
List接口提供了两种方法来有效地在list的任意位置插入和删除多个元素。
注意:当list包含其本身作为元素时,要特别小心equals和hashCode不再在此list上有良好的定义。
一些特有的方法:
default void replaceAll(UnaryOperator<E> operator): 将operator应用在各元素上并代替原元素。
default void sort(Comparator<? super E> c): 按照Comparator指定的顺序对list排序。
E get(int index): 返回list内特定位置的元素。
E set(int index, E element): 使用特定元素代替list中特定位置的元素。返回该位置的原元素。
void add(int index, E element): 在list中的特定位置插入特定元素。原元素及之后的元素右移。
void remove(int index): 删除list中特定位置的元素,其余元素左移。返回被删除的元素。
int indexOf(Object o): 返回list中特定元素第一次出现的索引,如果不存在则返回-1.
int lastIndexOf(object o): 返回list中特定元素最后一次出现的索引,如果不存在则返回-1.
list<E> subList(int fromIndex, int toIndex): 返回list在[fromIndex, toIndex)之间的部分。若fromIndex于toIndex相等,则返回空。返回list的改变不会反应到当前list,反之亦然。