阅读(96) (0)

鸿蒙OS LinkedList

2022-06-16 16:25:36 更新

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 中的分离器

返回:

此列表中元素的拆分器