當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Dart LinkedHashSet用法及代碼示例


dart:collection 庫中LinkedHashSet 類的用法介紹如下。

LinkedHashSet 是基於 hash-table 的 Set 實現。

Set 的默認實現是 LinkedHashSet

LinkedHashSet 還跟蹤元素的插入順序,並以 first-to-last 插入順序進行迭代。

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}

要刪除所有元素並清空集合,請使用 clear

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

也可以看看:

  • Set 是集合的通用接口,其中每個對象隻能出現一次。
  • HashSet 不保證迭代中對象的順序。
  • SplayTreeSet 按排序順序迭代對象。
實現的類型

Set<E>

可用的擴展

EnumByName

相關用法


注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 LinkedHashSet<E> class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。