LinkedList<E extends LinkedListEntry<E>>基础

一个扩展自LinkedListEntry的特殊双链表。

这不是一个泛型数据结构。它只接受扩展LinkedListEntry类的元素。有关允许在两端以恒定时间添加和删除元素的泛型集合的Queue实现,请参阅。

这不是List实现。尽管它的名字,这个类不实现List接口。它不允许通过索引以恒定时间查找。

因为元素本身包含这个链表的链接,所以每个元素一次只能在一个链表中。要将元素添加到另一个链表,必须首先将其从当前链表(如果有)中删除。同样,由于这个原因,removecontains方法基于身份,即使LinkedListEntry选择覆盖Object.==

作为回报,每个元素都知道自己在链表中的位置,以及它所在的链表。这允许使用元素进行恒定时间的LinkedListEntry.insertAfterLinkedListEntry.insertBeforeLinkedListEntry.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
本可迭代对象的元素数量。
无设置器覆盖
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>
将此 可迭代对象 的每个元素扩展为零个或多个元素。
继承
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>
创建一个包含此可迭代对象前count个元素的惰性可迭代对象。
继承
takeWhile(bool test(E value)) Iterable<E>
创建一个包含满足test的前导元素的惰性可迭代对象。
继承
toList({bool growable = true}) List<E>
创建一个包含此Iterable元素的List
继承
toSet() Set<E>
创建一个包含与这个可迭代对象相同元素的Set
继承
toString() String
返回this的元素(部分)的字符串表示。
继承
where(bool test(E element)) Iterable<E>
创建一个新的惰性Iterable,其中包含所有满足谓词test的元素。
继承
whereType<T>() Iterable<T>
创建一个新的惰性Iterable,其中包含所有类型为T的元素。
继承

运算符

operator ==(Object other) bool
等号运算符。
继承