List接口源码解读
List<E> extends Collection<E>
有序集合(也称为序列)。此接口的用户可以精确控制列表中每个元素的位置插入。用户可以通过其整数索引(position in)访问元素,并搜索列表中的元素。与集合不同,列表通常允许重复元素。更正式地说,列表通常允许元素对e1和e2,这样e1.equals(e2),并且允许空元素,它们通常允许多个空元素。通过在用户试图插入副本时抛出运行时异常,可以实现禁止复制的列表,这并不是不可想象的,但是我们希望这种用法很少见。List接口添加了额外的规定,超出了集合接口中指定的那些,在iterator、add、delete、equals 、hashCode方法的契约上。为了方便起见,这里还包含了其他继承方法的声明。List接口为列表元素的位置(索引)访问提供了四种方法。列表(如Java数组)是基于零的。注意,这些操作的执行时间可能与某些实现的索引值成正比(例如LinkedList类)。因此,迭代列表中的元素通常是如果调用方不知道实现,则最好通过它进行索引。List接口提供了一个特殊的迭代器,称为ListIterator,它允许插入和替换元素,并且除了迭代器接口提供的正常操作外,还可以双向访问。提供了一个方法来获取从列表中指定位置开始的列表迭代器。List接口提供了两种方法来搜索指定的对象。从性能的角度来看,应该谨慎使用这些方法。在许多实现中,它们将执行代价高昂的线性搜索。List接口提供了两种方法来有效地插入和删除列表中任意一点的多个元素。
注意:虽然列表可以将自己包含为元素,但是要特别注意:equals, hashCode方法不再在这样的列表中定义得很好。
一些列表实现对元素有限制 ,他们可能包含,例如,一些实现禁止空元素,一些实现对元素的类型有限制。试图添加不符合条件的元素会引发未检查异常,通常NullPointerException或ClassCastException。试图查询不符合条件的元素的存在可能会引发异常,或者只返回false;有些实现将显示前一种行为,有些实现将显示后一种行为。更一般地说,尝试对不符合条件的元素执行操作,如果该元素的完成不会导致将不符合条件的元素插入到列表中,则可能会引发异常,也可能会成功,这取决于实现的选项。在这个接口的规范中,这些异常被标记为“可选”。
重写接口Collection中的方法
default void sort(Comparator<? super E> c):根据指定的元素所引发的顺序对该列表进行排序
E get(int index):Returns the element at the specified position in this list
E set(int index, E element):Replaces the element at the specified position in this list with the specified element (optional operation).
void add(int index, E element):index at which the specified element is to be inserted
int indexOf(Object o):返回指定元素第一次出现的索引值,如果该列表不包含该元素,则为-1
int lastIndexOf(Object o):返回指定元素最后一次出现的索引,如果该列表不包含该元素,则为-1。
ListIterator<E> listIterator():返回列表中元素的列表迭代器(按适当的顺序)。
ListIterator<E> listIterator(int index):返回列表中元素的列表迭代器(按适当的顺序),从列表中的指定位置开始。指定的索引指示初始调用{@link ListIterator#next next}返回的第一个元素。对{@link ListIterator#previous previous}的初始调用将返回具有指定索引-1的元素。
List<E> subList(int fromIndex, int toIndex):返回列表中指定的fromIndex(包括)和toIndex(排除)之间的部分的视图。(如果fromIndex和toIndex相等,则返回的列表为空。)