一个可以相对排序的对象集合。
该集合基于自平衡的二叉树。它允许大多数操作以摊销对数时间。
集合的元素通过在构造函数中传递的 compare
函数进行比较,用于排序和等性。如果集合中只有一个对象 a
,那么 set.contains(b)
将在 compare(a, b) == 0
时返回 true
,并且不检查 a == b
的值。如果省略比较函数,则假定对象是 Comparable,并使用它们的 Comparable.compareTo 方法进行比较。不可比较的对象(包括 null
)在这种情况下将不起作用。
注意:不要在操作集合(例如在 forEach 或 containsAll 调用期间或迭代集合时)时修改集合(添加或删除元素)。
不要以改变它们的等性(以及因此它们的哈希码)的方式修改集合中的元素。某些专门的集合类型可能对等性更宽容,在这种情况下,它们应记录它们不同的行为和限制。
示例
final planets = SplayTreeSet<String>((a, b) => a.compareTo(b));
planets.add('Neptune');
planets.addAll({'Venus', 'Mars', 'Earth', 'Jupiter'});
print(planets); // {Earth, Jupiter, Mars, Neptune, Venus}
要检查集合是否为空,请使用 isEmpty 或 isNotEmpty。要查找集合中的元素数量,请使用 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)?])
- 创建一个包含所有
elements
的 SplayTreeSet。工厂 -
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 - 等号运算符。继承