LinkedHashSet<E>抽象 最终

LinkedHashSet是一种基于哈希表的Set实现。

默认的Set实现是LinkedHashSet

LinkedHashSet还记录了插入元素的顺序,迭代按照从第一个到最后一个插入的顺序进行。

LinkedHashSet的元素必须具有一致的Object.==Object.hashCode实现。这意味着==运算符必须在元素上定义一个稳定的等价关系(自反性、对称性、传递性和随时间保持一致),并且对于被视为相等的对象,hashCode必须是相同的。

元素的迭代顺序与元素的插入顺序相同。后来添加的元素会在迭代中出现得更晚。向集合中添加已存在的元素不会改变其迭代顺序中的位置,但是移除元素后再次添加它将使它成为迭代中的最后一个元素。

大多数简单的HashSet操作都是在(可能摊销的)常数时间内完成的:addcontainsremovelength,前提是对象的哈希值分布良好。

注意:在执行操作(如在forEachcontainsAll调用的函数中)或迭代集合时,不要修改集合(添加或删除元素)。

不要以改变其等价性(以及因此其哈希值)的方式来修改集合中的元素。某些特定类型的集合可能在对等性方面更为宽容,在这种情况下,它们应该记录它们的不同行为和限制。

示例

final planets = <String>{}; // LinkedHashSet

要向集合中添加数据,请使用addaddAll

final uranusAdded = planets.add('Uranus'); // true
planets.addAll({'Venus', 'Mars', 'Earth', 'Jupiter'});
print(planets); // {Uranus, Venus, Mars, Earth, Jupiter}

要检查集合是否为空,请使用isEmptyisNotEmpty。要查找集合中的元素数量,请使用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}

要同时移除多个元素,请使用removeWhereremoveAll

planets.removeWhere((element) => element.startsWith('E'));
print(planets); // {Uranus, Venus, Jupiter}

要从集合中移除不满足特定条件的所有元素,请使用retainWhere

planets.retainWhere((element) => element.contains('Jupiter'));
print(planets); // {Jupiter}
```dart continued
To remove all elements and empty the set, use [clear].
```dart continued
planets.clear();
print(planets.isEmpty); // true
print(planets); // {}

另请参阅

  • Set是集合的一般接口,其中每个对象只能出现一次。
  • HashSet迭代对象的顺序不保证。
  • SplayTreeSet按排序顺序迭代对象。
实现类型
可用的扩展

构造函数

LinkedHashSet({bool equals(E, E)?, int hashCode(E)?, bool isValidKey(dynamic)?})
使用提供的 equalshashCode 创建一个有序插入的哈希集合。
工厂
LinkedHashSet.from(Iterable elements)
创建一个包含所有 elements 的链接哈希集合。
工厂
LinkedHashSet.identity()
创建一个基于身份的有序插入集合。
工厂
LinkedHashSet.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
在集合的每个元素上执行一个函数。
覆盖
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>
创建一个 Iterable,提供除了前 count 个元素之外的所有元素。
继承
skipWhile(bool test(E value)) Iterable<E>
创建一个在满足 test 条件时跳过前导元素的 Iterable
继承
take(int count) Iterable<E>
创建一个迭代器的懒加载序列,包含此迭代器的 count 个第一个元素。
继承
takeWhile(bool test(E value)) Iterable<E>
创建一个对象满足 test 的前导元素延迟可迭代的集合。
继承
toList({bool growable = true}) List<E>
创建一个包含此 可迭代 元素的 List
继承
toSet() Set<E>
创建一个与这个 Set 有相同元素和行为的新 Set
继承
toString() String
此对象的字符串表示形式。
继承
union(Set<E> other) Set<E>
创建一个包含此集合和 other 中所有元素的新集合。
继承
where(bool test(E element)) Iterable<E>
创建一个新的惰性 可迭代,其中包含所有满足谓词 test 的元素。
继承
whereType<T>() Iterable<T>
创建一个新的惰性 可迭代,其中包含具有类型 T 的所有元素。
继承

运算符

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