dart:collection
库中LinkedList
类的用法介绍如下。
扩展 LinkedListEntry 的元素的专用 double-linked 列表。
这不是通用的数据结构。它只接受 extend
和 LinkedListEntry 类的元素。请参阅Queue 实现以获取允许在末尾添加和删除恒定时间的通用集合。
这不是List 实现。尽管它的名字,这个类没有实现List 接口。它不允许按索引进行恒定时间查找。
因为元素本身包含这个链表的链接,所以每个元素一次只能在一个链表中。要将元素添加到另一个列表,必须首先将其从当前列表(如果有)中删除。出于同样的原因,remove 和 contains 方法基于 identity
,即使 LinkedListEntry 选择覆盖 Object.== 也是如此。
作为返回,每个元素都知道它自己在链表中的位置,以及它在哪个链表中。当你只有元素时,这允许恒定时间 LinkedListEntry.insertAfter 、 LinkedListEntry.insertBefore 和 LinkedListEntry.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
}
- 继承
- 可用的扩展
相关用法
- Dart LinkedList.isEmpty用法及代码示例
- Dart LinkedHashMap用法及代码示例
- Dart LinkedHashMap.from用法及代码示例
- Dart LinkedHashMap.fromEntries用法及代码示例
- Dart LinkedHashMap.fromIterables用法及代码示例
- Dart LinkedHashSet.from用法及代码示例
- Dart LinkedHashSet构造函数用法及代码示例
- Dart LinkedHashMap.identity用法及代码示例
- Dart LinkedHashMap.fromIterable用法及代码示例
- Dart LinkedHashSet.identity用法及代码示例
- Dart LinkedHashMap.of用法及代码示例
- Dart LinkedHashSet用法及代码示例
- Dart LinkedHashSet.of用法及代码示例
- Dart LinkedHashMap构造函数用法及代码示例
- Dart Link.resolveSymbolicLinks用法及代码示例
- Dart Link.resolveSymbolicLinksSync用法及代码示例
- Dart LineSplitter用法及代码示例
- Dart ListMixin.expand用法及代码示例
- Dart List.first用法及代码示例
- Dart List.sort用法及代码示例
- Dart ListMixin.contains用法及代码示例
- Dart ListQueue.of用法及代码示例
- Dart ListQueue.contains用法及代码示例
- Dart ListMixin.join用法及代码示例
- Dart ListMixin.setAll用法及代码示例
注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 LinkedList<E extends LinkedListEntry<E>> class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。