1.Interface List简介
- 父接口:Collection < E>, Iterable < E>
- 子类:AbstractList , AbstractSequentialList , ArrayList , AttributeList , CopyOnWriteArrayList , LinkedList , RoleList , RoleUnresolvedList , Stack , Vector
有序集合(也称为序列 )。 该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。
与集合不同,列表通常允许重复的元素。 更正式地,列表通常允许元素e1和e2成对使得e1.equals(e2) ,并且如果它们允许空元素,它们通常允许多个空元素。 有人可能希望实现一个禁止重复的列表,当用户尝试插入时会抛出运行时异常,但是我们预计这种使用是罕见的。
该List接口放置额外的约定,超过在Collection指定接口上的iterator,add,remove,equals和hashCode方法合同。 其他继承方法的声明也包括在这里以方便。
List接口提供四种位置(索引)访问列表元素的方法。 列表(如Java数组)为零。 请注意,这些操作可能与某些实现的索引值(例如LinkedList类)成时执行。 因此,如果调用者不知道实现,则通过迭代列表中的元素通常优先于索引。
所述List接口提供了一个特殊的迭代器,称为ListIterator,其允许元件插入和更换,并且除了该Iterator接口提供正常操作的双向访问。 提供了一种方法来获取从列表中的指定位置开始的列表迭代器。
List接口提供了两种方法来搜索指定的对象。 从性能角度来说,谨慎使用这些方法。 在许多实现中,它们将执行昂贵的线性搜索。
List接口提供了两种方法来有效地插入和删除列表中任意一点的多个元素。
注意:虽然列表允许将其自身作为元素,但建议您非常小心: equals和hashCode方法在这样的列表中不再被很好地定义。
某些列表实现对它们可能包含的元素有限制。 例如,一些实现禁止空元素,有些实现对元素的类型有限制。 尝试添加不合格元素会引发未经检查的异常,通常为NullPointerException或ClassCastException 。 尝试查询不合格元素的存在可能会引发异常,或者可能只是返回false; 一些实现将展现出前者的行为,一些实现将展现出后者。 更一般来说,对于不完成不会导致将不合格元素插入到列表中的不合格元素的操作,可能会在执行选项时抛出异常或成功。 此异常在此接口的规范中标记为“可选”。
注:其子类ArrayList和LinkedList最为常用,其区别是ArrayList是底层为可变长度的数组,LinkedList为链表。
2.1Class LinkedList简介
- 父类/父接口:Serializable , Cloneable , Iterable , Collection < E>, Deque < E>, List < E>, Queue < E>
LinkedList为双链表,实现了List和Deque接口。 实现所有可选列表操作,并允许所有元素(包括null )。
2.2如何创建一个LinkedList
LinkedList< Integer> arraylist = new LinkedList< Integer>()
此语句用来声明一个数组链表LinkedListLinkedList< Integer> arraylist2= new LinkedList< Integer>(LinkedList)
;此语句用来创建一个数组链表LinkedList2,其中LinkedList已经存在,此时 LinkedList2与LinkedList完全相同。
2.3.LinkedList常用方法
假设创建链表如下
LinkedList< Integer> arraylist2= new LinkedList< Integer>(LinkedList);
a.add(3);
a.add(2);
a.add(1);
其实为[1,2,3]
头 尾
0 1 2
- boolean add(E e)
将指定的元素追加到此列表的末尾 - boolean remove(Object o)
从列表中删除指定元素的第一个出现(如果存在)。 如果此列表不包含该元素,则它将保持不变。 更正式地,删除具有最低索引i的元素,使得(o==null ? get(i)==null : o.equals(get(i))) (如果存在这样的元素)。 如果此列表包含指定的元素(或等效地,如果此列表作为调用的结果而更改),则返回true 。 - boolean addAll(Collection<? extends E> c)
按照指定集合的迭代器返回的顺序将指定集合中的所有元素追加到此列表的末尾。 如果在操作进行中修改了指定的集合,则此操作的行为是未定义的。 (注意,如果指定的集合是此列表,并且它是非空的,则会发生这种情况。) - boolean addAll(int index, Collection<? extends E> c)
将指定集合中的所有元素插入到此列表中,从指定的位置开始。 将当前位于该位置(如果有的话)的元素和随后的任何元素移动到右边(增加其索引)。 新元素将按照指定集合的迭代器返回的顺序显示在列表中。 - E getFirst()
返回此列表中的第一个元素。
E getLast()
返回此列表中的最后一个元素。 - E removeFirst()
从此列表中删除并返回第一个元素。 - E removeLast()
从此列表中删除并返回最后一个元素。 - void addFirst(E e)
在该列表开头插入指定的元素。 - void addLast(E e)
将指定的元素追加到此列表的末尾。 - boolean contains(Object o)
如果此列表包含指定的元素,则返回true 。 更正式地说,返回true当且仅当此列表包含至少一个元素e这样(onull ? enull : o.equals(e))。 - int size()
返回此列表中的元素数。 - void clear()
从列表中删除所有元素。 此呼叫返回后,列表将为空。 - E get(int index)
返回此列表中指定位置的元素 - E set(int index, E element)
用指定的元素替换此列表中指定位置的元素。 - void add(int index, E element)
在此列表中的指定位置插入指定的元素。 将当前位于该位置的元素(如果有)和任何后续元素(向其索引添加一个)移动。 - E remove(int index)
删除该列表中指定位置的元素。 将任何后续元素移动到左侧(从其索引中减去一个元素)。 返回从列表中删除的元素。 - int lastIndexOf(Object o)
返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 更正式地,返回最高指数i ,如(o==null ? get(i)==null : o.equals(get(i))) ,或-1如果没有这样的指数。 - E peek()
检索但不删除此列表的头(第一个元素),如果此列表为空返回null - E element()
检索但不删除此列表的头(第一个元素),如果此列表为空返回异常 - E remove()
检索并删除此列表的头(第一个元素),如果此列表为空返回异常 - E poll()
检索并删除此列表的头(第一个元素),如果此列表为空返回null - boolean offer(E e)
将指定的元素添加为此列表的尾部(最后一个元素),成功即返回true。即
若 a.offer(5); 则a=[1, 2, 3, 5]
- boolean offerFirst(E e)
在此列表的前面插入指定的元素,成功即返回true - Object[] toArray()
以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。
返回的数组将是“安全的”,因为该列表不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组)。 因此,调用者可以自由地修改返回的数组。
此方法充当基于阵列和基于集合的API之间的桥梁。