Dart是否提供易于使用的链接列表?

时间:2014-03-10 05:21:53

标签: dart

我有一个算法,出于性能原因,应使用链接列表。我希望从列表中不断追加和删除元素,并且我永远不需要按索引查找特定元素。

我看到Dart在LinkedList中有一个dart:collectionAPI docs),但这需要所有条目都为LinkedListEntry的子类。我无法控制放入列表中的元素,我也不想创建包装器。

我在核心Dart SDK中有哪些选择?

2 个答案:

答案 0 :(得分:1)

您可以创建可重用的包装器,而不是使每个值成为LinkedListEntry的子类

import 'dart:collection';

class MyLinkedListEntry<T> extends LinkedListEntry {
  T value;
  MyLinkedListEntry(this.value);
  @override
  String toString() => '${super.toString()}: ${value}';
}

void main(List<String> args) {
  var l = new LinkedList();

  var s = new MyLinkedListEntry<String>("SomeString");
  l.add(s);
  s.insertAfter(new MyLinkedListEntry<int>(125));

  l.forEach((e) => print(e));
}

答案 1 :(得分:1)

如果要在两端添加和删除,则需要Queue。您可以使用ListQueue(这是使用new Queue()时的默认设置)或DoubleLinkedQueue。 前者仅保证在末端添加和删除的摊销常数时间操作,而后者具有绝对保证。 ListQueue有时需要在添加上增加其后备存储,这需要线性时间,但它只在列表已满时才会发生,并且它执行传统的增长倍增以保证摊销的常量操作。 / p>

如果你只想在最后添加和删除(基本上是一个堆栈),那么普通列表应该没问题。