一个基于无序哈希表的 集合 实现。
HashSet
的元素必须具有一致的相等性和 hashCode 实现。这意味着等于操作必须在元素上定义一个稳定的等价关系(自反的、对称的、传递的,并且随时间一致),并且 hashCode 必须与相等性一致,以便对被认为相等的对象具有相同的值。
对 HashSet
的大多数简单操作都是在 (潜在摊销的) 常数时间内完成的:`add`、`contains`、`remove` 和 `length`,前提是对象的哈希码分布良好。
集合的迭代顺序未指定,取决于提供的元素的哈希码。然而,顺序是稳定的:对同一集合进行多次迭代将产生相同的顺序,只要集合未被修改。
注意:在进行操作期间(例如,在调用 forEach 或 containsAll 函数时或遍历集合时)不要修改集合(添加或删除元素)。
在元素位于集合中的时候,不要以改变它们相等性(从而改变它们的 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 按排序顺序遍历对象。
- 实现类型
-
- Set<
E>
- Set<
- 可用的扩展
构造函数
- 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
的哈希集。工厂
属性
方法
-
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< ) → Set<E> otherE> - 创建一个新集合,包含此集合和
other
中的所有元素。继承 -
where(
bool test(E element)) → Iterable< E> - 创建一个新的懒惰 Iterable,包含所有满足谓词
test
的元素。继承 -
whereType<
T> () → Iterable< T> - 创建一个新的懒惰 Iterable,包含所有类型为
T
的元素。继承
运算符
-
operator ==(
Object other) → bool - 相等运算符。继承