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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。