dart:collection
库中LinkedHashSet
类的用法介绍如下。
LinkedHashSet 是基于 hash-table 的 Set 实现。
Set 的默认实现是 LinkedHashSet 。
LinkedHashSet
还跟踪元素的插入顺序,并以 first-to-last 插入顺序进行迭代。
LinkedHashSet
的元素必须具有一致的 Object.== 和 Object.hashCode 实现。这意味着 ==
运算符必须在元素上定义稳定的等价关系(自反、对称、传递和随时间一致),并且对于被 ==
视为相等的对象,hashCode
必须相同。
元素的迭代是按元素插入顺序完成的。一个接一个添加的元素将在迭代的后期出现。添加一个已经在集合中的元素不会改变它在迭代顺序中的位置,但是删除一个元素并再次添加它会使其成为迭代的最后一个元素。
HashSet
上的大多数简单操作都是在(可能摊销的)恒定时间内完成的:add、contains、remove 和 length,前提是对象的哈希码分布良好。
注意:请勿在对集合执行操作时修改集合(添加或删除元素),例如在 forEach 或 containsAll 调用期间调用的函数中,或在迭代集合时。
不要以改变它们在集合中的相等性(以及它们的哈希码)的方式修改元素。一些特殊类型的集合在平等方面可能更宽容,在这种情况下,它们应该记录它们的不同行为和限制。
例子:
final planets = <String>{}; // LinkedHashSet
final uranusAdded = planets.add('Uranus'); // true
planets.addAll({'Venus', 'Mars', 'Earth', 'Jupiter'});
print(planets); // {Uranus, Venus, Mars, Earth, Jupiter}
要检查集合是否为空,请使用 isEmpty 或 isNotEmpty 。要查找集合中的元素数,请使用 length 。
print(planets.isEmpty); // false
print(planets.length); // 5
要检查集合是否包含具有特定值的元素,请使用 contains 。
final marsExists = planets.contains('Mars'); // true
forEach 方法使用集合的每个元素调用一个函数。
planets.forEach(print);
// Uranus
// Venus
// Mars
// Earth
// Jupiter
要制作该集合的副本,请使用 toSet 。
final copySet = planets.toSet();
print(copySet); // {Uranus, Venus, Mars, Earth, Jupiter}
要删除元素,请使用 remove 。
final removedValue = planets.remove('Mars'); // Mars
print(planets); // {Uranus, Venus, Earth, Jupiter}
要同时删除多个元素,请使用 removeWhere 或 removeAll 。
planets.removeWhere((element) => element.startsWith('E'));
print(planets); // {Uranus, Venus, Jupiter}
要删除此集合中不满足条件的所有元素,请使用 retainWhere 。
planets.retainWhere((element) => element.contains('Jupiter'));
print(planets); // {Jupiter}
要删除所有元素并清空集合,请使用 clear 。
planets.clear();
print(planets.isEmpty); // true
print(planets); // {}
也可以看看:
- Set 是集合的通用接口,其中每个对象只能出现一次。
- HashSet 不保证迭代中对象的顺序。
- SplayTreeSet 按排序顺序迭代对象。
- 实现的类型
-
Set<
E> - 可用的扩展
相关用法
- Dart LinkedHashSet.from用法及代码示例
- Dart LinkedHashSet构造函数用法及代码示例
- Dart LinkedHashSet.identity用法及代码示例
- Dart LinkedHashSet.of用法及代码示例
- Dart LinkedHashMap用法及代码示例
- Dart LinkedHashMap.from用法及代码示例
- Dart LinkedHashMap.fromEntries用法及代码示例
- Dart LinkedHashMap.fromIterables用法及代码示例
- Dart LinkedHashMap.identity用法及代码示例
- Dart LinkedHashMap.fromIterable用法及代码示例
- Dart LinkedHashMap.of用法及代码示例
- Dart LinkedHashMap构造函数用法及代码示例
- Dart LinkedList.isEmpty用法及代码示例
- Dart LinkedList用法及代码示例
- Dart Link.resolveSymbolicLinks用法及代码示例
- Dart Link.resolveSymbolicLinksSync用法及代码示例
- Dart LineSplitter用法及代码示例
- Dart ListMixin.expand用法及代码示例
- Dart List.first用法及代码示例
- Dart List.sort用法及代码示例
- Dart ListMixin.contains用法及代码示例
- Dart ListQueue.of用法及代码示例
- Dart ListQueue.contains用法及代码示例
- Dart ListMixin.join用法及代码示例
- Dart ListMixin.setAll用法及代码示例
注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 LinkedHashSet<E> class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。