基于无序哈希表的Set实现。
HashSet中的元素必须有一致的equals和hashCode实现。这意味着equals操作必须在元素上定义一个稳定的等价关系(自反性、对称性、传递性,并且随时间一致),而hashCode必须与equals一致,以便对于被认为是相等的对象具有相同的值。
HashSet上的大多数简单操作都是(可能摊销的)常数时间内完成的:add、contains、remove和length,前提是对象的hashcode分布良好。
集合的迭代顺序未指定,并依赖于提供的元素的hashcode。但是,顺序是稳定的:只要集合未被修改,多次迭代同一个集合会产生相同的顺序。
注意:在集合上执行操作(例如在forEach或containsAll调用期间或遍历集合时)时,不要修改集合(添加或删除元素)。
在元素位于集合中时,不要以改变它们的equals(以及因此的hashCode)的方式修改元素。某些特殊的集合类型可能对equals更宽容,在这种情况下,它们应记录它们的不同行为和限制。
示例
final letters = HashSet<String>();
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
的哈希集合。工厂
属性
- first → E
- 第一个元素。无设置器继承
- hashCode → int
- 此对象的哈希码。无设置器继承
- isEmpty → bool
- 此集合是否没有元素。无设置器继承
- isNotEmpty → bool
- 此集合是否至少有一个元素。无设置器继承
-
iterator → Iterator<
E> - 提供迭代器,遍历此集合的元素。无设置器重写
- last → E
- 最后一个元素。无设置器继承
- length → int
- 此 Iterable 中元素的数量。无设置器继承
- 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> - 将此Iterable的每个元素展开成零个或多个元素。继承
-
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 - 返回满足给定谓词的最后一个元素。继承
-
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> - 创建一个 Iterable,提供除了前
count
个元素之外的所有元素。继承 -
skipWhile(
bool test(E value)) → Iterable< E> - 创建一个
Iterable
,在满足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 - 此对象的字符串表示形式。继承
-
并集(
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 - 等号运算符。继承