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