當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。