SplayTreeSet<E>final

一个可以相对排序的对象集合。

该集合基于自平衡的二叉树。它允许大多数操作以摊销对数时间。

集合的元素通过在构造函数中传递的 compare 函数进行比较,用于排序和等性。如果集合中只有一个对象 a,那么 set.contains(b) 将在 compare(a, b) == 0 时返回 true,并且不检查 a == b 的值。如果省略比较函数,则假定对象是 Comparable,并使用它们的 Comparable.compareTo 方法进行比较。不可比较的对象(包括 null)在这种情况下将不起作用。

注意:不要在操作集合(例如在 forEachcontainsAll 调用期间或迭代集合时)时修改集合(添加或删除元素)。

不要以改变它们的等性(以及因此它们的哈希码)的方式修改集合中的元素。某些专门的集合类型可能对等性更宽容,在这种情况下,它们应记录它们不同的行为和限制。

示例

final planets = SplayTreeSet<String>((a, b) => a.compareTo(b));

要向集合添加数据,请使用 addaddAll

planets.add('Neptune');
planets.addAll({'Venus', 'Mars', 'Earth', 'Jupiter'});
print(planets); // {Earth, Jupiter, Mars, Neptune, Venus}

要检查集合是否为空,请使用 isEmptyisNotEmpty。要查找集合中的元素数量,请使用 length

final isEmpty = planets.isEmpty; // false
final length = planets.length; // 5

要检查集合是否包含特定元素,请使用 contains

final marsExists = planets.contains('Mars'); // true

要使用索引获取元素值,请使用 elementAt

final elementAt = planets.elementAt(1);
print(elementAt); // Jupiter

要复制集合,请使用 toSet

final copySet = planets.toSet(); // a `SplayTreeSet` with the same ordering.
print(copySet); // {Earth, Jupiter, Mars, Neptune, Venus}

要删除元素,请使用 remove

final removedValue = planets.remove('Mars'); // true
print(planets); // {Earth, Jupiter, Neptune, Venus}

要同时删除多个元素,请使用 removeWhere

planets.removeWhere((element) => element.startsWith('J'));
print(planets); // {Earth, Neptune, Venus}

要删除不满足条件的所有元素,请使用 retainWhere

planets.retainWhere((element) => element.contains('Earth'));
print(planets); // {Earth}

要删除所有元素并清空集合,请使用 clear

planets.clear();
print(planets.isEmpty); // true
print(planets); // {}

另请参阅

  • Set 是对象集合的基类。
  • HashSet 不保证迭代中对象的顺序。
  • LinkedHashSet 基于插入顺序存储对象。
混合类型
可用的扩展

构造函数

SplayTreeSet([int compare(E key1, E key2)?, bool isValidKey(dynamic potentialKey)?])
使用给定的比较函数创建一个新的 SplayTreeSet
SplayTreeSet.from(Iterable elements, [int compare(E key1, E key2)?, bool isValidKey(dynamic potentialKey)?])
创建一个包含所有 elementsSplayTreeSet
工厂
SplayTreeSet.of(Iterable<E> elements, [int compare(E key1, E key2)?, bool isValidKey(dynamic potentialKey)?])
elements 创建一个 SplayTreeSet
工厂

属性

first → E
第一个元素。
无设置器覆盖
hashCode int
此对象的哈希码。
无设置器继承
isEmpty bool
此集合是否没有元素。
无设置器覆盖
isNotEmpty bool
此集合是否至少有一个元素。
无设置器覆盖
iterator Iterator<E>
一个新的 Iterator,允许遍历此 Iterable 的元素。
无设置器覆盖
last → E
最后一个元素。
无设置器覆盖
length int
Iterable 中元素的数量。
无设置器覆盖
runtimeType Type
对象的运行时类型的表示。
无设置器继承
single → E
检查此可迭代是否只有一个元素,并返回该元素。
无设置器覆盖

方法

add(E element) bool
value 添加到集合中。
覆盖
addAll(Iterable<E> elements) → void
将所有 elements 添加到此集合中。
覆盖
any(bool test(E element)) bool
检查此可迭代对象中的任何元素是否满足 test
继承
cast<R>() Set<R>
此可迭代对象作为 R 实例的可迭代对象的视图。
覆盖
clear() → void
从集合中移除所有元素。
覆盖
contains(Object? element) bool
集合是否包含等于 element 的元素。
覆盖
containsAll(Iterable<Object?> other) bool
此集合是否包含 other 的所有元素。
继承
difference(Set<Object?> other) Set<E>
创建一个新的集合,其中包含此集合中不在 other 中的元素。
覆盖
elementAt(int index) → E
返回第 index 个元素。
继承
every(bool f(E element)) bool
检查此可迭代对象中的每个元素是否满足 test
继承
expand<T>(Iterable<T> f(E element)) Iterable<T>
将此 Iterable 的每个元素扩展为零个或多个元素。
继承
firstWhere(bool test(E value), {E orElse()?}) → E
返回满足给定谓词的第一个元素。
继承
fold<T>(T initialValue, T combine(T previousValue, E element)) → T
通过迭代地将集合的每个元素与现有值结合,将集合缩减为一个单一值。
继承
followedBy(Iterable<E> other) Iterable<E>
创建当前可迭代对象与 other 的懒连接。
继承
forEach(void f(E element)) → void
按迭代顺序在当前可迭代对象中的每个元素上调用 action
继承
intersection(Set<Object?> other) Set<E>
创建一个新的集合,它是当前集合与 other 的交集。
覆盖
join([String separator = ""]) String
将每个元素转换为 String 并连接字符串。
继承
lastWhere(bool test(E value), {E orElse()?}) → E
返回满足给定谓词的最后元素。
继承
lookup(Object? object) → E?
如果集合中存在与 object 相等的对象,则返回它。
覆盖
map<T>(T f(E element)) Iterable<T>
通过 toElement 修改了当前可迭代的元素。
继承
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时调用。
继承
reduce(E combine(E value, E element)) → E
通过迭代组合集合的元素并使用提供的函数,将集合减少到一个单一的值。
继承
remove(Object? object) bool
从集合中移除 value
覆盖
removeAll(Iterable<Object?> elements) → void
从本集合中移除 elements 中的每个元素。
覆盖
removeWhere(bool test(E element)) → void
移除所有满足 test 的本集合元素。
继承
retainAll(Iterable<Object?> elements) → void
移除本集合中不在 elements 中的所有元素。
覆盖
retainWhere(bool test(E element)) → void
移除所有不满足 test 的本集合元素。
继承
singleWhere(bool test(E value), {E orElse()?}) → E
满足test的单个元素。
继承
skip(int n) Iterable<E>
创建一个Iterable,提供除了前count个元素之外的所有元素。
继承
skipWhile(bool test(E value)) Iterable<E>
创建一个在test满足时跳过前导元素的Iterable
继承
take(int n) 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
此对象的字符串表示。
覆盖
union(Set<E> other) Set<E>
创建一个新的集合,包含此集合和other中的所有元素。
覆盖
where(bool f(E element)) Iterable<E>
创建一个新的惰性可迭代,包含所有满足谓词test的元素。
继承
whereType<T>() 可迭代<T>
创建一个新的惰性可迭代,包含所有类型为T的元素。
继承

运算符

operator ==(Object other) bool
等号运算符。
继承