一个扩展LinkedListEntry的元素的特殊双链表。
这不是一个泛型数据结构。它只接受扩展LinkedListEntry类的元素。有关允许在两端进行常数时间添加和删除的泛型集合的Queue实现,请参阅。
这不是一个List实现。尽管其名称,但此类未实现List接口。它不允许通过索引进行常数时间查找。
因为元素本身包含此链表的链接,所以每个元素一次只能在一个列表中。要将元素添加到另一个列表中,必须首先将其从当前列表中删除(如果有的话)。同样,由于这个原因,remove和contains方法基于标识符,即使LinkedListEntry选择覆盖Object.==。
作为回报,每个元素都了解自己在链表中的位置,以及自己在哪个列表中。这允许在你只有元素的情况下进行常数时间LinkedListEntry.insertAfter、LinkedListEntry.insertBefore和LinkedListEntry.unlink操作。
LinkedList
还可以在任一端执行常数时间的添加和删除,以及常数时间的长度获取器。
示例
final class EntryItem extends LinkedListEntry<EntryItem> {
final int id;
final String text;
EntryItem(this.id, this.text);
@override
String toString() {
return '$id : $text';
}
}
void main() {
final linkedList = LinkedList<EntryItem>();
linkedList
.addAll([EntryItem(1, 'A'), EntryItem(2, 'B'), EntryItem(3, 'C')]);
print(linkedList.first); // 1 : A
print(linkedList.last); // 3 : C
// Add new item after first item.
linkedList.first.insertAfter(EntryItem(15, 'E'));
// Add new item before last item.
linkedList.last.insertBefore(EntryItem(10, 'D'));
// Iterate items.
for (var entry in linkedList) {
print(entry);
// 1 : A
// 15 : E
// 2 : B
// 10 : D
// 3 : C
}
// Remove item using index from list.
linkedList.elementAt(2).unlink();
print(linkedList); // (1 : A, 15 : E, 10 : D, 3 : C)
// Remove first item.
linkedList.first.unlink();
print(linkedList); // (15 : E, 10 : D, 3 : C)
// Remove last item from list.
linkedList.remove(linkedList.last);
print(linkedList); // (15 : E, 10 : D)
// Remove all items.
linkedList.clear();
print(linkedList.length); // 0
print(linkedList.isEmpty); // true
}
- 继承
- 可用扩展
构造函数
- LinkedList()
- 构建一个新的空链表。
属性
- first → E
- 第一个元素。无设置器覆盖
- hashCode → int
- 此对象的哈希码。无设置器继承
- isEmpty → bool
- 此集合没有元素。无设置器覆盖
- isNotEmpty → bool
- 此集合至少有一个元素。无设置器继承
-
iterator → Iterator<
E> - 一个新的
Iterator
,允许迭代此Iterable
的元素。无设置器覆盖 - last → E
- 最后一个元素。无设置器覆盖
- length → int
- 此LinkedList中的元素数量。无设置器覆盖
- runtimeType → Type
- 表示对象运行时类型的一个表示。无设置器继承
- single → E
- 检查此可迭代是否只有一个元素,并返回该元素。无设置器覆盖
方法
-
add(
E entry) → void - 将
entry
添加到链表的末尾。 -
addAll(
Iterable< E> entries) → void - 将
entries
添加到链表的末尾。 -
addFirst(
E entry) → void - 将
entry
添加到链表的头部。 -
any(
bool test(E element)) → bool - 检查此可迭代的任何元素是否满足
test
。继承 -
cast<
R> () → Iterable< R> - 将此可迭代视为
R
实例的可迭代视图。继承 -
clear(
) → void - 从此链表中移除所有元素。
-
contains(
Object? entry) → bool - 是否
entry
是属于此列表的 LinkedListEntry。覆盖 -
elementAt(
int index) → E - 返回第
index
个元素。继承 -
every(
bool test(E element)) → bool - 检查此可迭代的每个元素是否满足
test
。继承 -
expand<
T> (Iterable< T> toElements(E element)) → Iterable<T> - 将此 Iterable 的每个元素展开为零个或多个元素。继承
-
firstWhere(
bool test(E element), {E orElse()?}) → E - 满足给定谓词
test
的第一个元素。继承 -
fold<
T> (T initialValue, T combine(T previousValue, E element)) → T - 通过迭代将集合中的每个元素与现有值组合,将集合还原为单个值继承
-
followedBy(
Iterable< E> other) → Iterable<E> - 创建当前可迭代对象与
other
的懒连接。继承 -
forEach(
void action(E entry)) → void - 使用此链表中的每个条目调用
action
。覆盖 -
join(
[String separator = ""]) → String - 将每个元素转换为 String 并连接字符串。继承
-
lastWhere(
bool test(E element), {E orElse()?}) → E - 满足给定谓词
test
的最后一个元素。继承 -
map<
T> (T toElement(E e)) → Iterable< T> - 通过
toElement
修改的当前可迭代的元素。继承 -
noSuchMethod(
Invocation invocation) → dynamic - 当访问不存在的方法或属性时调用。继承
-
reduce(
E combine(E value, E element)) → E - 通过使用提供的函数迭代组合集合的元素,将集合还原为单个值。继承
-
remove(
E entry) → bool - 从链表中移除
entry
。 -
singleWhere(
bool test(E element), {E orElse()?}) → E - 满足
test
的单元素。继承 -
skip(
int count) → Iterable< E> - 创建一个 Iterable,提供除前
count
个元素之外的所有元素。继承 -
skipWhile(
bool test(E value)) → Iterable< E> - 在
test
条件被满足时,创建一个跳过前面的元素的Iterable
。继承 -
take(
int count) → Iterable< E> - 创建一个包含这个
Iterable
的前count
个元素的惰性 Iterable。继承 -
takeWhile(
bool test(E value)) → Iterable< E> - 创建一个包含满足
test
条件的元素的异步 Iterable。继承 -
toList(
{bool growable = true}) → List< E> - 创建一个包含此 Iterable 的元素的 List。继承
-
toSet(
) → Set< E> - 创建一个包含此
Iterable
的相同元素的 Set。继承 -
toString(
) → String - 返回对(此)中某些元素的字符串表示。继承
-
where(
bool test(E element)) → Iterable< E> - 创建一个具有所有满足谓词
test
的元素的新的异步 Iterable。继承 -
whereType<
T> () → Iterable< T> - 创建一个具有类型
T
的所有元素的新的异步 Iterable。继承
运算符
-
operator ==(
Object other) → bool - 等于运算符。继承