dart:collection
库中SplayTreeSet
类的用法介绍如下。
可以相对于彼此排序的 Set 个对象。
该集合基于self-balancing 二叉树。它允许在摊销的对数时间内进行大多数操作。
使用构造函数中传递的compare
函数比较集合的元素,用于排序和相等。如果该集合仅包含一个对象 a
,那么 set.contains(b)
将返回 true
当且仅当 compare(a, b) == 0
并且甚至不检查 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 是用于对象集合的base-class。
- HashSet 不保证迭代中对象的顺序。
- LinkedHashSet 对象根据插入顺序存储。
- 混合类型
-
IterableMixin<
E> > SetMixin<E> - 可用的扩展
相关用法
- Dart SplayTreeSet.lookup用法及代码示例
- Dart SplayTreeSet.isEmpty用法及代码示例
- Dart SplayTreeSet.addAll用法及代码示例
- Dart SplayTreeSet.remove用法及代码示例
- Dart SplayTreeSet.isNotEmpty用法及代码示例
- Dart SplayTreeSet.retainAll用法及代码示例
- Dart SplayTreeSet.toSet用法及代码示例
- Dart SplayTreeSet.clear用法及代码示例
- Dart SplayTreeSet.removeAll用法及代码示例
- Dart SplayTreeSet.of用法及代码示例
- Dart SplayTreeSet.from用法及代码示例
- Dart SplayTreeSet.contains用法及代码示例
- Dart SplayTreeSet.intersection用法及代码示例
- Dart SplayTreeSet.add用法及代码示例
- Dart SplayTreeSet.difference用法及代码示例
- Dart SplayTreeSet.union用法及代码示例
- Dart SplayTreeMap.from用法及代码示例
- Dart SplayTreeMap.containsValue用法及代码示例
- Dart SplayTreeMap.addAll用法及代码示例
- Dart SplayTreeMap.fromIterables用法及代码示例
- Dart SplayTreeMap.fromIterable用法及代码示例
- Dart SplayTreeMap.clear用法及代码示例
- Dart SplayTreeMap.forEach用法及代码示例
- Dart SplayTreeMap.putIfAbsent用法及代码示例
- Dart SplayTreeMap用法及代码示例
注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 SplayTreeSet<E> class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。