一个扩展自LinkedListEntry的特殊双链表。
这不是一个泛型数据结构。它只接受扩展LinkedListEntry类的元素。有关允许在两端以恒定时间添加和删除元素的泛型集合的Queue实现,请参阅。
这不是List实现。尽管它的名字,这个类不实现List接口。它不允许通过索引以恒定时间查找。
因为元素本身包含这个链表的链接,所以每个元素一次只能在一个链表中。要将元素添加到另一个链表,必须首先将其从当前链表(如果有)中删除。同样,由于这个原因,remove和contains方法基于身份,即使LinkedListEntry选择覆盖Object.==。
作为回报,每个元素都知道自己在链表中的位置,以及它所在的链表。这允许使用元素进行恒定时间的LinkedListEntry.insertAfter、LinkedListEntry.insertBefore和LinkedListEntry.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< ) → Iterable<T> toElements(E element)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 - 等号运算符。继承