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


Dart SplayTreeSet用法及代碼示例


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

可以相對於彼此排序的 Set 個對象。

該集合基於self-balancing 二叉樹。它允許在攤銷的對數時間內進行大多數操作。

使用構造函數中傳遞的compare 函數比較集合的元素,用於排序和相等。如果該集合僅包含一個對象 a ,那麽 set.contains(b) 將返回 true 當且僅當 compare(a, b) == 0 並且甚至不檢查 a == b 的值。如果省略比較函數,則假定對象為 Comparable ,並使用它們的 Comparable.compareTo 方法進行比較。在這種情況下,不可比較的對象(包括 null )將無法用作元素。

注意:請勿在對集合執行操作時修改集合(添加或刪除元素),例如在 forEachcontainsAll 調用期間調用的函數中,或在迭代集合時。

不要以改變它們在集合中的相等性(以及它們的哈希碼)的方式修改元素。一些特殊類型的集合在平等方麵可能更寬容,在這種情況下,它們應該記錄它們的不同行為和限製。

例子:

final planets = SplayTreeSet<String>((a, b) => a.compareTo(b));

要將數據添加到集合中,請使用 addaddAll

planets.add('Neptune');
planets.addAll({'Venus', 'Mars', 'Earth', 'Jupiter'});
print(planets); // {Earth, Jupiter, Mars, Neptune, Venus}

要檢查集合是否為空,請使用 isEmptyisNotEmpty 。要查找集合中的元素數,請使用 length

final isEmpty = planets.isEmpty; // false
final length = planets.length; // 5

要檢查集合是否包含特定元素,請使用 contains

final marsExists = planets.contains('Mars'); // true

要使用索引獲取元素值,請使用 elementAt

final elementAt = planets.elementAt(1);
print(elementAt); // Jupiter

要製作集合的副本,請使用 toSet

final copySet = planets.toSet(); // a `SplayTreeSet` with the same ordering.
print(copySet); // {Earth, Jupiter, Mars, Neptune, Venus}

要刪除元素,請使用 remove

final removedValue = planets.remove('Mars'); // true
print(planets); // {Earth, Jupiter, Neptune, Venus}

要同時刪除多個元素,請使用 removeWhere

planets.removeWhere((element) => element.startsWith('J'));
print(planets); // {Earth, Neptune, Venus}

要刪除此集合中不滿足條件的所有元素,請使用 retainWhere

planets.retainWhere((element) => element.contains('Earth'));
print(planets); // {Earth}

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

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

也可以看看:

  • Set 是用於對象集合的base-class。
  • HashSet 不保證迭代中對象的順序。
  • LinkedHashSet 對象根據插入順序存儲。
混合類型

IterableMixin<E> SetMixin<E>

可用的擴展

EnumByName

相關用法


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