LinkedList
java.lang.Object
|—java.util.AbstractCollection<E&
|—|—java.util.AbstractList<E&
|—|—|—java.util.AbstractSequentialList<E&
|—|—|—|—java.util.LinkedList<E&
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable
List 和 Deque 接口的双向链表实现。 实现所有可选列表操作,并允许所有元素(包括 null)。
所有操作都按照双向链表的预期执行。 索引到列表中的操作将从开头或结尾遍历列表,以更接近指定索引的为准。
请注意,此实现不同步。 如果多个线程同时访问一个链表,并且至少有一个线程在结构上修改了链表,则必须对外同步。 (结构修改是添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这通常是通过同步一些自然封装列表的对象来完成的。 如果不存在这样的对象,则应使用 Collections#synchronizedList 方法“wrapped”该列表。 这最好在创建时完成,以防止对列表的意外不同步访问:
List list = Collections.synchronizedList(new LinkedList(...));
此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:如果在创建迭代器后的任何时间对列表进行结构修改,除了通过迭代器自己的 remove 或 add 方法之外,迭代器将抛出 ConcurrentModificationException。 因此,面对并发修改,迭代器快速而干净地失败,而不是在未来不确定的时间冒任意的、非确定性的行为。
请注意,不能保证迭代器的快速失败行为,因为一般来说,在存在不同步的并发修改的情况下,不可能做出任何硬保证。 快速失败的迭代器会尽最大努力抛出 ConcurrentModificationException。 因此,编写一个依赖于这个异常的正确性的程序是错误的:迭代器的快速失败行为应该只用于检测错误。
此类是 Java 集合框架的成员。
字段摘要
从类 java.util.AbstractList 继承的字段 |
---|
modCount |
构造函数摘要
构造函数 | 描述 |
---|---|
LinkedList() | 构造一个空列表。 |
LinkedList(Collection<? extends E> c) | 按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
void | add(int index, E element) | 在此列表中的指定位置插入指定元素。 |
boolean | add(E e) | 将指定元素附加到此列表的末尾。 |
boolean | addAll(int index, Collection<? extends E> c) | 将指定集合中的所有元素插入此列表,从指定位置开始。 |
boolean | addAll(Collection<? extends E> c) | 按照指定集合的迭代器返回的顺序,将指定集合中的所有元素附加到此列表的末尾。 |
void | addFirst(E e) | 在此列表的开头插入指定元素。 |
void | addLast(E e) | 将指定元素附加到此列表的末尾。 |
void | clear() | 从此列表中删除所有元素。 |
Object | clone() | 返回此 LinkedList 的浅表副本。 |
boolean | contains(Object o) | 如果此列表包含指定元素,则返回 true。 |
IteratorE | descendingIterator() | 以相反的顺序返回此双端队列中元素的迭代器。 |
E | element() | 检索但不删除此列表的头部(第一个元素)。 |
E | get(int index) | 返回此列表中指定位置的元素。 |
E | getFirst() | 返回此列表中的第一个元素。 |
E | getLast() | 返回此列表中的最后一个元素。 |
int | indexOf(Object o) | 返回此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则返回 -1。 |
int | lastIndexOf(Object o) | 返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回 -1。 |
ListIteratorE | listIterator(int index) | 返回此列表中元素的列表迭代器(以正确的顺序),从列表中的指定位置开始。 |
boolean | offer(E e) | 添加指定元素作为此列表的尾部(最后一个元素)。 |
boolean | offerFirst(E e) | 在此列表的前面插入指定的元素。 |
boolean | offerLast(E e) | 在此列表的末尾插入指定的元素。 |
E | peek() | 检索但不删除此列表的头部(第一个元素)。 |
E | peekFirst() | 检索但不删除此列表的第一个元素,如果此列表为空,则返回 null。 |
E | peekLast() | 检索但不删除此列表的最后一个元素,如果此列表为空,则返回 null。 |
E | poll() | 检索并删除此列表的头部(第一个元素)。 |
E | pollFirst() | 检索并删除此列表的第一个元素,如果此列表为空,则返回 null。 |
E | pollLast() | 检索并删除此列表的最后一个元素,如果此列表为空,则返回 null。 |
E | pop() | 从此列表表示的堆栈中弹出一个元素。 |
void | push(E e) | 将元素推送到此列表表示的堆栈上。 |
E | remove() | 检索并删除此列表的头部(第一个元素)。 |
E | remove(int index) | 移除此列表中指定位置的元素。 |
boolean | remove(Object o) | 从此列表中删除第一次出现的指定元素(如果存在)。 |
E | removeFirst() | 从此列表中删除并返回第一个元素。 |
boolean | removeFirstOccurrence(Object o) | 删除此列表中第一次出现的指定元素(从头到尾遍历列表时)。 |
E | removeLast() | 移除并返回此列表中的最后一个元素。 |
boolean | removeLastOccurrence(Object o) | 删除此列表中指定元素的最后一次出现(从头到尾遍历列表时)。 |
E | set(int index, E element) | 将此列表中指定位置的元素替换为指定元素。 |
int | size() | 返回此列表中的元素数。 |
SpliteratorE | spliterator() | 在此列表中的元素上创建一个后期绑定和快速失败的拆分器。 |
Object[] | toArray() | 以正确的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组。 |
<T> T[] | toArray(T[] a) | 以正确的顺序(从第一个元素到最后一个元素)返回一个包含此列表中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 |
从类 java.util.AbstractCollection 继承的方法 |
---|
containsAll, isEmpty, removeAll, retainAll, toString |
从类 java.util.AbstractList 继承的方法 |
---|
equals, hashCode, listIterator, removeRange, subList |
从类 java.util.AbstractSequentialList 继承的方法 |
---|
iterator |
从接口 java.util.Collection 继承的方法 |
---|
parallelStream, removeIf, stream |
从接口 java.util.Deque 继承的方法 |
---|
iterator |
从接口 java.lang.Iterable 继承的方法 |
---|
forEach |
从接口 java.util.List 继承的方法 |
---|
containsAll, equals, hashCode, isEmpty, iterator, listIterator, removeAll, replaceAll, retainAll, sort, subList |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
构造函数详细信息
LinkedList
public LinkedList()
构造一个空列表。
LinkedList
public LinkedList(Collection<? extends E> c)
按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。
参数:
参数名称 | 参数描述 |
---|---|
c | 将其元素放入此列表的集合 |
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果指定的集合为空 |
方法详情
getFirst
public E getFirst()
返回此列表中的第一个元素。
指定者:
接口 DequeE 中的 getFirst
返回:
此列表中的第一个元素
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此列表为空 |
getLast
public E getLast()
返回此列表中的最后一个元素。
指定者:
接口 DequeE 中的 getLast
返回:
此列表中的最后一个元素
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此列表为空 |
removeFirst
public E removeFirst()
从此列表中删除并返回第一个元素。
指定者:
接口 DequeE 中的 removeFirst
返回:
此列表中的第一个元素
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此列表为空 |
removeLast
public E removeLast()
移除并返回此列表中的最后一个元素。
指定者:
接口 DequeE 中的 removeLast
返回:
此列表中的最后一个元素
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此列表为空 |
addFirst
public void addFirst(E e)
在此列表的开头插入指定元素。
指定者:
接口 DequeE 中的 addFirst
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
addLast
public void addLast(E e)
将指定元素附加到此列表的末尾。
此方法等效于 add(E)。
指定者:
接口 DequeE 中的 addLast
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
contains
public boolean contains(Object o)
如果此列表包含指定元素,则返回 true。 更正式地说,当且仅当此列表包含至少一个元素 e 满足 (o==null ? e==null : o.equals(e)) 时,才返回 true。
指定者:
包含在接口 CollectionE 中
指定者:
包含在接口 DequeE
指定者:
包含在接口 ListE 中
覆盖:
包含在类 AbstractCollectionE 中
参数:
参数名称 | 参数描述 |
---|---|
o | 要测试其在此列表中的存在的元素 |
返回:
如果此列表包含指定元素,则为 true
size
public int size()
返回此列表中的元素数。
指定者:
接口 CollectionE 中的大小
指定者:
接口 DequeE 中的大小
指定者:
接口 ListE 中的大小
指定者:
AbstractCollectionE 类中的大小
返回:
此列表中的元素数
add
public boolean add(E e)
将指定元素附加到此列表的末尾。
此方法等效于 addLast(E)。
指定者:
添加接口CollectionE
指定者:
添加接口 DequeE
指定者:
添加接口ListE
指定者:
添加接口QueueE
覆盖:
添加类 AbstractListE
参数:
参数名称 | 参数描述 |
---|---|
e | 要附加到此列表的元素 |
返回:
true(由 Collection#add 指定)
remove
public boolean remove(Object o)
从此列表中删除第一次出现的指定元素(如果存在)。 如果此列表不包含该元素,则它不变。 更正式地说,删除具有最低索引 i 的元素,使得 (o==null ? get(i)==null : o.equals(get(i))) (如果存在这样的元素)。 如果此列表包含指定的元素(或等效地,如果此列表因调用而更改),则返回 true。
指定者:
在接口 CollectionE 中删除
指定者:
在接口 DequeE 中移除
指定者:
在接口 ListE 中删除
覆盖:
在类 AbstractCollectionE 中删除
参数:
参数名称 | 参数描述 |
---|---|
o | 要从此列表中删除的元素(如果存在) |
返回:
如果此列表包含指定元素,则为 true
addAll
public boolean addAll(Collection<? extends E> c)
按照指定集合的迭代器返回的顺序,将指定集合中的所有元素附加到此列表的末尾。 如果在操作正在进行时修改了指定的集合,则此操作的行为是未定义的。 (请注意,如果指定的集合是这个列表,并且它是非空的,则会发生这种情况。)
指定者:
接口 CollectionE 中的 addAll
指定者:
接口 ListE 中的 addAll
覆盖:
类 AbstractCollectionE 中的 addAll
参数:
参数名称 | 参数描述 |
---|---|
c | 包含要添加到此列表的元素的集合 |
返回:
如果此列表因调用而更改,则为 true
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果指定的集合为空 |
addAll
public boolean addAll(int index, Collection<? extends E> c)
将指定集合中的所有元素插入此列表,从指定位置开始。 将当前位于该位置的元素(如果有)和任何后续元素向右移动(增加它们的索引)。 新元素将按照指定集合的迭代器返回的顺序出现在列表中。
指定者:
接口 ListE 中的 addAll
覆盖:
类 AbstractSequentialListE 中的 addAll
参数:
参数名称 | 参数描述 |
---|---|
index | 插入指定集合中第一个元素的索引 |
c | 包含要添加到此列表的元素的集合 |
返回:
如果此列表因调用而更改,则为 true
Throws:
Throw名称 | Throw描述 |
---|---|
IndexOutOfBoundsException | 如果索引超出范围 (index < 0 || index > size()) |
NullPointerException | 如果指定的集合为空 |
clear
public void clear()
从此列表中删除所有元素。 此调用返回后,列表将为空。
指定者:
在界面 CollectionE 中清除
指定者:
在接口 ListE 中清除
覆盖:
在类 AbstractListE 中清除
get
public E get(int index)
返回此列表中指定位置的元素。
指定者:
进入接口 ListE
覆盖:
进入类 AbstractSequentialListE
参数:
参数名称 | 参数描述 |
---|---|
index | 要返回的元素的索引 |
返回:
此列表中指定位置的元素
Throws:
Throw名称 | Throw描述 |
---|---|
IndexOutOfBoundsException | 如果索引超出范围 (index < 0 || index >= size()) |
set
public E set(int index, E element)
将此列表中指定位置的元素替换为指定元素。
指定者:
在接口 ListE 中设置
覆盖:
在类 AbstractSequentialListE 中设置
参数:
参数名称 | 参数描述 |
---|---|
index | 要替换的元素的索引 |
element | 要存储在指定位置的元素 |
返回:
先前在指定位置的元素
Throws:
Throw名称 | Throw描述 |
---|---|
IndexOutOfBoundsException | 如果索引超出范围 (index < 0 || index >= size()) |
add
public void add(int index, E element)
在此列表中的指定位置插入指定元素。 将当前位于该位置的元素(如果有)和任何后续元素向右移动(将其索引加一)。
指定者:
添加接口ListE
覆盖:
添加类 AbstractSequentialListE
参数:
参数名称 | 参数描述 |
---|---|
index | 要插入指定元素的索引 |
element | 要插入的元素 |
Throws:
Throw名称 | Throw描述 |
---|---|
IndexOutOfBoundsException | 如果索引超出范围 (index < 0 || index > size()) |
remove
public E remove(int index)
移除此列表中指定位置的元素。 将任何后续元素向左移动(从它们的索引中减去 1)。 返回从列表中删除的元素。
指定者:
在接口 ListE 中删除
覆盖:
在类 AbstractSequentialListE 中删除
参数:
参数名称 | 参数描述 |
---|---|
index | 要删除的元素的索引 |
返回:
先前在指定位置的元素
Throws:
Throw名称 | Throw描述 |
---|---|
IndexOutOfBoundsException | 如果索引超出范围 (index < 0 || index >= size()) |
indexOf
public int indexOf(Object o)
返回此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则返回 -1。 更正式地说,返回满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i,如果没有这样的索引,则返回 -1。
指定者:
接口 ListE 中的 indexOf
覆盖:
AbstractListE 类中的 indexOf
参数:
参数名称 | 参数描述 |
---|---|
o | 要搜索的元素 |
返回:
此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则为 -1
lastIndexOf
public int lastIndexOf(Object o)
返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回 -1。 更正式地说,返回满足 (o==null ? get(i)==null : o.equals(get(i))) 的最高索引 i,如果没有这样的索引,则返回 -1。
指定者:
接口 ListE 中的 lastIndexOf
覆盖:
类 AbstractListE 中的 lastIndexOf
参数:
参数名称 | 参数描述 |
---|---|
o | 要搜索的元素 |
返回:
此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则为 -1
peek
public E peek()
检索但不删除此列表的头部(第一个元素)。
指定者:
查看界面 DequeE
指定者:
查看接口 QueueE
返回:
此列表的头部,如果此列表为空,则返回 null
element
public E element()
检索但不删除此列表的头部(第一个元素)。
指定者:
接口 DequeE 中的元素
指定者:
接口 QueueE 中的元素
返回:
此列表的头部
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此列表为空 |
poll
public E poll()
检索并删除此列表的头部(第一个元素)。
指定者:
接口 DequeE 中的轮询
指定者:
在接口 QueueE 中轮询
返回:
此列表的头部,如果此列表为空,则返回 null
remove
public E remove()
检索并删除此列表的头部(第一个元素)。
指定者:
在接口 DequeE 中移除
指定者:
在接口 QueueE 中删除
返回:
此列表的头部
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此列表为空 |
offer
public boolean offer(E e)
添加指定元素作为此列表的尾部(最后一个元素)。
指定者:
在接口 DequeE 中提供
指定者:
接口QueueE中的offer
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
返回:
true(由 Queue#offer 指定)
offerFirst
public boolean offerFirst(E e)
在此列表的前面插入指定的元素。
指定者:
接口 DequeE 中的 offerFirst
参数:
参数名称 | 参数描述 |
---|---|
e | 要插入的元素 |
返回:
true(由 Deque#offerFirst 指定)
offerLast
public boolean offerLast(E e)
在此列表的末尾插入指定的元素。
指定者:
接口 DequeE 中的 offerLast
参数:
参数名称 | 参数描述 |
---|---|
e | 要插入的元素 |
返回:
true(由 Deque#offerLast 指定)
peekFirst
public E peekFirst()
检索但不删除此列表的第一个元素,如果此列表为空,则返回 null。
指定者:
接口 DequeE 中的 peekFirst
返回:
此列表的第一个元素,如果此列表为空,则返回 null
peekLast
public E peekLast()
检索但不删除此列表的最后一个元素,如果此列表为空,则返回 null。
指定者:
接口 DequeE 中的 peekLast
返回:
此列表的最后一个元素,如果此列表为空,则返回 null
pollFirst
public E pollFirst()
检索并删除此列表的第一个元素,如果此列表为空,则返回 null。
指定者:
接口 DequeE 中的 pollFirst
返回:
此列表的第一个元素,如果此列表为空,则返回 null
pollLast
public E pollLast()
检索并删除此列表的最后一个元素,如果此列表为空,则返回 null。
指定者:
接口 DequeE 中的 pollLast
返回:
此列表的最后一个元素,如果此列表为空,则返回 null
push
public void push(E e)
将元素推送到此列表表示的堆栈上。 换句话说,在这个列表的前面插入元素。
此方法等效于 addFirst(E)。
指定者:
推入接口 DequeE
参数:
参数名称 | 参数描述 |
---|---|
e | 要推动的元素 |
pop
public E pop()
从此列表表示的堆栈中弹出一个元素。 换句话说,删除并返回此列表的第一个元素。
此方法等效于 removeFirst()。
指定者:
弹出界面DequeE
返回:
此列表前面的元素(这是此列表表示的堆栈的顶部)
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此列表为空 |
removeFirstOccurrence
public boolean removeFirstOccurrence(Object o)
删除此列表中第一次出现的指定元素(从头到尾遍历列表时)。 如果列表不包含该元素,则它不变。
指定者:
接口 DequeE 中的 removeFirstOccurrence
参数:
参数名称 | 参数描述 |
---|---|
o | 要从此列表中删除的元素(如果存在) |
返回:
如果列表包含指定元素,则为 true
removeLastOccurrence
public boolean removeLastOccurrence(Object o)
删除此列表中指定元素的最后一次出现(从头到尾遍历列表时)。 如果列表不包含该元素,则它不变。
指定者:
接口 DequeE 中的 removeLastOccurrence
参数:
参数名称 | 参数描述 |
---|---|
o | 要从此列表中删除的元素(如果存在) |
返回:
如果列表包含指定元素,则为 true
listIterator
public ListIteratorE listIterator(int index)
返回此列表中元素的列表迭代器(以正确的顺序),从列表中的指定位置开始。 遵守 List.listIterator(int) 的一般约定。
列表迭代器是快速失败的:如果列表在创建迭代器后的任何时间进行结构修改,除了通过列表迭代器自己的删除或添加方法之外,列表迭代器将抛出 ConcurrentModificationException。 因此,面对并发修改,迭代器快速而干净地失败,而不是在未来不确定的时间冒任意的、非确定性的行为。
指定者:
接口 ListE 中的 listIterator
指定者:
类 AbstractSequentialListE 中的 listIterator
参数:
参数名称 | 参数描述 |
---|---|
index | 要从列表迭代器返回的第一个元素的索引(通过调用 next) |
返回:
此列表中元素的 ListIterator(按正确顺序),从列表中的指定位置开始
Throws:
Throw名称 | Throw描述 |
---|---|
IndexOutOfBoundsException | 如果索引超出范围 (index < 0 || index > size()) |
descendingIterator
public IteratorE descendingIterator()
从接口复制的描述:双端队列
以相反的顺序返回此双端队列中元素的迭代器。 元素将按从最后(尾)到第一个(头)的顺序返回。
指定者:
DequeE 接口中的 descendingIterator
返回:
以相反顺序对该双端队列中的元素进行迭代
clone
public Object clone()
返回此 LinkedList 的浅表副本。 (元素本身不会被克隆。)
覆盖:
在类 Object 中克隆
返回:
此 LinkedList 实例的浅表副本
toArray
public Object[] toArray()
以正确的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组。
返回的数组将是“安全的”,因为此列表不维护对它的引用。 (换句话说,这个方法必须分配一个新数组)。 因此,调用者可以自由修改返回的数组。
此方法充当基于数组和基于集合的 API 之间的桥梁。
指定者:
接口 CollectionE 中的 toArray
指定者:
接口 ListE 中的 toArray
覆盖:
AbstractCollectionE 类中的 toArray
返回:
以正确顺序包含此列表中所有元素的数组
toArray
public <T> T[] toArray(T[] a)
以正确的顺序(从第一个元素到最后一个元素)返回一个包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果列表适合指定的数组,则在其中返回。否则,将使用指定数组的运行时类型和此列表的大小分配一个新数组。
如果列表适合指定的数组并有剩余空间(即,数组的元素多于列表),则数组中紧随列表末尾的元素设置为 null。 (仅当调用者知道列表不包含任何空元素时,这对确定列表的长度很有用。)
与 toArray() 方法一样,此方法充当基于数组的 API 和基于集合的 API 之间的桥梁。此外,此方法允许对输出数组的运行时类型进行精确控制,并且在某些情况下可用于节省分配成本。
假设 x 是一个已知仅包含字符串的列表。以下代码可用于将列表转储到新分配的 String 数组中:
String[] y = x.toArray(new String[0]);
请注意,toArray(new Object[0]) 在功能上与 toArray() 相同。
指定者:
接口 CollectionE 中的 toArray
指定者:
接口 ListE 中的 toArray
覆盖:
AbstractCollectionE 类中的 toArray
类型参数:
类型参数名称 | 类型参数描述 |
---|---|
T | 包含集合的数组的运行时类型 |
参数:
参数名称 | 参数描述 |
---|---|
a | 存储列表元素的数组(如果它足够大); 否则,将为此目的分配相同运行时类型的新数组。 |
返回:
包含列表元素的数组
Throws:
Throw名称 | Throw描述 |
---|---|
ArrayStoreException | 如果指定数组的运行时类型不是此列表中每个元素的运行时类型的超类型 |
NullPointerException | 如果指定的数组为空 |
spliterator
public SpliteratorE spliterator()
在此列表中的元素上创建一个后期绑定和快速失败的拆分器。
Spliterator 报告 Spliterator#SIZED 和 Spliterator#ORDERED。 覆盖实现应记录附加特征值的报告。
指定者:
接口 CollectionE 中的分离器
指定者:
接口 IterableE 中的分离器
指定者:
接口 ListE 中的分离器
返回:
此列表中元素的拆分器