当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart LinkedList用法及代码示例


dart:collection 库中LinkedList 类的用法介绍如下。

扩展 LinkedListEntry 的元素的专用 double-linked 列表。

这不是通用的数据结构。它只接受 extendLinkedListEntry 类的元素。请参阅Queue 实现以获取允许在末尾添加和删除恒定时间的通用集合。

这不是List 实现。尽管它的名字,这个类没有实现List 接口。它不允许按索引进行恒定时间查找。

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

作为返回,每个元素都知道它自己在链表中的位置,以及它在哪个链表中。当你只有元素时,这允许恒定时间 LinkedListEntry.insertAfterLinkedListEntry.insertBeforeLinkedListEntry.unlink 操作。

LinkedList 还允许在任一端添加和删除恒定时间,以及恒定时间长度获取器。

例子:

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
}

继承

Object Iterable<E> LinkedList

可用的扩展

EnumByName

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 LinkedList<E extends LinkedListEntry<E>> class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。