HashSet<E>抽象 最终

一个基于无序哈希表的 集合 实现。

HashSet 的元素必须具有一致的相等性和 hashCode 实现。这意味着等于操作必须在元素上定义一个稳定的等价关系(自反的、对称的、传递的,并且随时间一致),并且 hashCode 必须与相等性一致,以便对被认为相等的对象具有相同的值。

HashSet 的大多数简单操作都是在 (潜在摊销的) 常数时间内完成的:`add`、`contains`、`remove` 和 `length`,前提是对象的哈希码分布良好。

集合的迭代顺序未指定,取决于提供的元素的哈希码。然而,顺序是稳定的:对同一集合进行多次迭代将产生相同的顺序,只要集合未被修改。

注意:在进行操作期间(例如,在调用 forEachcontainsAll 函数时或遍历集合时)不要修改集合(添加或删除元素)。

在元素位于集合中的时候,不要以改变它们相等性(从而改变它们的 hashCode)的方式来修改它们。某些特定的集合类型可能对相等性限制更宽松,在这种情况下,它们应该记录它们不同的行为和限制。

示例

final letters = HashSet<String>();

要将数据添加到集合中,请使用 `add` 或 `addAll`。

letters.add('A');
letters.addAll({'B', 'C', 'D'});

要检查集合是否为空,请使用 `isEmpty` 或 `isNotEmpty`。要获取集合中元素的数量,请使用 `length`。

print(letters.isEmpty); // false
print(letters.length); // 4
print(letters); // fx {A, D, C, B}

要检查集合是否包含具有特定值的元素,请使用 `contains`。

final bExists = letters.contains('B'); // true

forEach 方法会调用一个函数,该函数针对集合中的每个元素进行调用。

letters.forEach(print);
// A
// D
// C
// B

要复制集合,请使用 `toSet`。

final anotherSet = letters.toSet();
print(anotherSet); // fx {A, C, D, B}

要删除元素,请使用 `remove`。

final removedValue = letters.remove('A'); // true
print(letters); // fx {B, C, D}

要同时删除多个元素,请使用 `removeWhere` 或 `removeAll`。

letters.removeWhere((element) => element.startsWith('B'));
print(letters); // fx {D, C}

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

letters.retainWhere((element) => element.contains('C'));
print(letters); // {C}

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

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

另请参阅

  • Set 是一个通用的集合接口,其中每个对象只能出现一次。
  • LinkedHashSet 对象基于插入顺序存储。
  • SplayTreeSet 按排序顺序遍历对象。
实现类型
可用的扩展

构造函数

HashSet({bool equals(E, E)?, int hashCode(E)?, bool isValidKey(dynamic)?})
使用提供的 equals 创建一个哈希集。
工厂
HashSet.from(Iterable elements)
创建一个包含所有 elements 的哈希集。
工厂
HashSet.identity()
创建一个无序的基于身份的集合。
工厂
HashSet.of(Iterable<E> elements)
创建一个包含所有 elements 的哈希集。
工厂

属性

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

方法

add(E value) bool
value 添加到集。
继承
addAll(Iterable<E> elements) → void
将所有 elements 添加到此集。
继承
any(bool test(E element)) bool
检查此可迭代对象是否满足 test 条件。
继承
cast<R>() Set<R>
将此集合显示为 R 实例的集合视图。
继承
clear() → void
从集合中删除所有元素。
继承
contains(Object? value) bool
判断 value 是否在集合中。
继承
containsAll(Iterable<Object?> other) bool
判断此集合是否包含 other 中的所有元素。
继承
difference(Set<Object?> other) Set<E>
创建一个新的集合,包含此集合中不在 other 中的元素。
继承
elementAt(int index) → E
返回第 index 个元素。
继承
every(bool test(E element)) bool
检查此可迭代对象中的每个元素是否满足 test 条件。
继承
expand<T>(Iterable<T> toElements(E element)) Iterable<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 element)) → void
按照迭代顺序在此可迭代对象的每个元素上调用action
继承
intersection(Set<Object?> other) Set<E>
创建一个新的集合,它是此集合与other之间的交集。
继承
join([String separator = ""]) String
将每个元素转换为String并连接这些字符串。
继承
lastWhere(bool test(E element), {E orElse()?}) → E
满足给定谓词test的最后一个元素。
继承
lookup(Object? object) → E?
如果集合中存在等于object的元素,则返回它。
继承
map<T>(T toElement(E e)) Iterable<T>
通过toElement修改的当前元素。
继承
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时调用。
继承
reduce(E combine(E value, E element)) → E
通过使用提供的函数迭代组合集合的元素来将集合简化为单个值。
继承
remove(Object? value) 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 element), {E orElse()?}) → E
满足test条件的单个元素。
继承
skip(int count) Iterable<E>
创建一个迭代器,提供除了前count个元素之外的所有元素。
继承
skipWhile(bool test(E value)) Iterable<E>
创建一个迭代器,在test满足条件的情况下跳过前面的元素。
继承
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 元素和表现相同的 Set
继承
toString() String
此对象的字符串表示。
继承
union(Set<E> other) Set<E>
创建一个新集合,包含此集合和 other 中的所有元素。
继承
where(bool test(E element)) Iterable<E>
创建一个新的懒惰 Iterable,包含所有满足谓词 test 的元素。
继承
whereType<T>() Iterable<T>
创建一个新的懒惰 Iterable,包含所有类型为 T 的元素。
继承

运算符

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