------------------------以下是摘自List源码作者介绍
有序集合(也称为序列)。此界面的用户可以精确控制每个元素在列表中的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并在列表中搜索元素。
与集合不同,列表通常允许重复元素。更正式地说,列表通常允许元素对e1和e2如此e1.equals(e2) ,并且如果它们完全允许 null 元素,它们通常允许多个 null 元素。有人可能希望通过在用户尝试插入它们时抛出运行时异常来实现一个禁止重复的列表,这并非不可想象,但我们希望这种用法很少见。
除了Collection接口中指定的规定之外, List接口还对迭代器、 add 、 remove 、 equals和hashCode方法的合同进行了额外的规定。为方便起见,此处还包括其他继承方法的声明。
List接口提供了四种对列表元素进行位置(索引)访问的方法。列表(如 Java 数组)是从零开始的。请注意,对于某些实现(例如LinkedList类),这些操作的执行时间可能与索引值成正比。因此,如果调用者不知道实现,则迭代列表中的元素通常比通过它索引更可取。
List接口提供了一个特殊的迭代器,称为ListIterator ,除了Iterator接口提供的正常操作之外,它还允许元素插入和替换以及双向访问。提供了一种方法来获取从列表中指定位置开始的列表迭代器。
List接口提供了两种方法来搜索指定的对象。从性能的角度来看,应谨慎使用这些方法。在许多实现中,它们将执行代价高昂的线性搜索。
List接口提供了两种方法来有效地在列表中的任意点插入和删除多个元素。
注意:虽然允许列表将自身包含为元素,但建议格外小心: equals和hashCode方法不再在此类列表上得到很好的定义。
一些列表实现对它们可能包含的元素有限制。例如,一些实现禁止空元素,而一些实现对其元素的类型有限制。尝试添加不合格的元素会引发未经检查的异常,通常是NullPointerException或ClassCastException 。尝试查询不合格元素的存在可能会引发异常,或者它可能只是返回 false;一些实现会表现出前一种行为,而另一些会表现出后者。更一般地,尝试对不合格元素进行操作,其完成不会导致将不合格元素插入到列表中,这可能会引发异常,也可能会成功,这取决于实现的选择。此类异常在此接口的规范中被标记为“可选”。
List接口表示数据结构中的链表,其继承collection接口,又往里面添加了一些链表操作的方法,主要是随机访问、删除、查找、专用的迭代器等,如下所示:
/**
*随机获取
*/
E get(int index);
/**
* 随机设置值
*/
E set(int index, E element);
/**
* 随机添加
*/
void add(int index, E element);
/**
*随机移除
*/
E remove(int index);
// Search Operations
/**
* 查找
*/
int indexOf(Object o);
/**
* 从后查找
*/
int lastIndexOf(Object o);
// List Iterators
/**
*专用迭代
*/
ListIterator<E> listIterator();
/**
* 从某个位置迭代
*/
ListIterator<E> listIterator(int index);
// View
/**
* 子列表
*/
List<E> subList(int fromIndex, int toIndex);