<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java `TreeSet`類 > 原文: [https://howtodoinjava.com/java/collections/java-treeset-class/](https://howtodoinjava.com/java/collections/java-treeset-class/) Java `TreeSet`類擴展了 `AbstractSet`和實現了`NavigableSet`接口。 它與`HashSet`類非常相似,除了它以**排序順序**存儲元素。 排序順序可以是自然順序,也可以是樹集合創建時提供的[比較器](https://howtodoinjava.com/java8/using-comparator-becomes-easier-with-lambda-expressions-java-8/)的排序順序,具體取決于所使用的[構造器](https://howtodoinjava.com/oops/java-constructors/)。 ```java Table of Contents 1\. TreeSet Hierarchy 2\. TreeSet Features 3\. TreeSet Constructors 4\. TreeSet Methods 5\. TreeSet Example 6\. TreeSet Usecases 7\. TreeSet Performance 8\. Conclusion ``` ## 1\. `TreeSet`層次結構 `TreeSet`類擴展了`AbstractSet`類并實現了`NavigableSet`接口。 `NavigableSet`接口以層次結構順序擴展`SortedSet`。 ```java class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable { //implementation } ``` ![TreeSet Hierarchy](https://img.kancloud.cn/bb/71/bb712becf5e77d44cb95d4400b4d3f9b_446x287.png) 樹集合層次結構 ## 2\. TreeSet 特性 * 它擴展了`AbstractSet`類,擴展了`AbstractCollection`類。 * 它實現了`NavigableSet`接口,該接口擴展了`SortedSet`接口。 * `TreeSet`中不允許重復的值。 * 在`TreeSet`中不允許`NULL`。 * 這是一個**有序集合**,它按排序順序存儲元素。 * 像[`HashSet`](https://howtodoinjava.com/java/collections/java-hashset/)一樣,此類為基本操作(添加,刪除,包含和調整大小)提供恒定的時間性能。 * `TreeSet`不允許插入異構對象,因為它必須比較對象以確定排序順序。 * `TreeSet`沒有[同步](https://howtodoinjava.com/java/multi-threading/wait-notify-and-notifyall-methods/)。 如果多個線程同時訪問哈希集合,并且至少有一個線程修改了哈希集合,則必須在外部對其進行同步。 * 使用`Collections.synchronizedSortedSet(new TreeSet())`方法來獲取同步的`TreeSet`。 * 此類的迭代器方法返回的迭代器為**快速失敗**,并且如果在創建迭代器后的任何時間修改了集合,則可能會拋出`ConcurrentModificationException`,除了通過迭代器自己的`remove()`方法之外 。 * `TreeSet`還實現了`Searlizable`和[`Cloneable`](https://howtodoinjava.com/array/java-array-clone-shallow-copy/)接口。 ## 3\. `TreeSet`構造器 `TreeSet`具有四個可能的構造器: 1. **`TreeSet()`**:創建一個新的空樹集合,并根據其元素的自然順序對其進行排序。 2. **`TreeSet(Comparator c)`**:創建一個新的空樹集合,該樹集合根據指定的比較器進行排序。 3. **`TreeSet(SortedSet s)`**:創建一個新樹集合,其中包含與指定排序集相同的元素并使用相同的順序。 4. **`TreeSet(Collection c)`**:創建一個新樹集合,其中包含指定集合中的元素,并根據其元素的自然順序對其進行排序。 ## 4\. `TreeSet`方法 1. **`boolean add(E e)`**:如果指定的元素尚不存在,則將其添加到`Set`中。 2. **`Comparator comparator()`**:返回用于對該集合中的元素進行排序的比較器;如果此集合使用其元素的自然排序,則返回`null`。 3. **`Object first()`**:返回此集合中當前的第一個(最小)元素。 4. **`Object last()`**:返回當前在此集合中的最后一個(最大)元素。 5. **`void clear()`**:從`TreeSet`中刪除所有元素。 6. **`boolean contains(Object o)`**:如果`TreeSet`包含指定的元素,則返回`true`,否則返回`false`。 7. **`boolean isEmpty()`**:如果`TreeSet`不包含任何元素,則返回`true`,否則返回`false`。 8. **`int size()`**:返回`TreeSet`中的元素數。 9. **`Iterator<E> iterator()`**:以**升序**返回此集合中元素的迭代器。 10. **`Iterator<E> endingIterator()`**:以降序返回此集合中元素的迭代器。 11. **`NavigableSet<E> endingSet()`**:返回此集合中包含的元素的逆序視圖。 12. **`boolean remove(Object o)`**:從`TreeSet`中刪除指定的元素(如果存在)并返回`true`,否則返回`false`。 13. **`Object clone()`**:返回`TreeSet`的淺表副本。 14. **`Spliterator<E> spliterator()`**:在此`TreeSet`中的元素上創建后綁定和快速失敗的分隔符。 它與樹集合提供的順序相同。 ## 5\. `TreeSet`示例 #### 5.1 `TreeSet`添加,刪除,迭代器示例 ```java //1\. Create TreeSet TreeSet<String> TreeSet = new TreeSet<>(); //2\. Add elements to TreeSet TreeSet.add("A"); TreeSet.add("B"); TreeSet.add("C"); TreeSet.add("D"); TreeSet.add("E"); System.out.println(TreeSet); //3\. Check if element exists boolean found = TreeSet.contains("A"); //true System.out.println(found); //4\. Remove an element TreeSet.remove("D"); //5\. Iterate over values Iterator<String> itr = TreeSet.iterator(); while(itr.hasNext()) { String value = itr.next(); System.out.println("Value: " + value); } ``` 程序輸出。 ```java [A, B, C, D, E] true Value: A Value: B Value: C Value: E ``` #### 5.2 將`TreeSet`轉換為數組示例 Java 示例,使用`toArrray()`方法將`TreeSet`轉換為[數組](https://howtodoinjava.com/java-array/)。 ```java TreeSet<String> TreeSet = new TreeSet<>(); TreeSet.add("A"); TreeSet.add("B"); TreeSet.add("C"); TreeSet.add("D"); TreeSet.add("E"); String[] values = new String[TreeSet.size()]; TreeSet.toArray(values); System.out.println(Arrays.toString(values)); ``` 程序輸出: ```java [A, B, C, D, E] ``` #### 5.3 將`TreeSet`轉換為`ArrayList`示例 使用 Java 8 流 API 將`TreeSet`轉換為[`ArrayList`](https://howtodoinjava.com/java-arraylist/)的 Java 示例。 ```java TreeSet<String> TreeSet = new TreeSet<>(); TreeSet.add("A"); TreeSet.add("B"); TreeSet.add("C"); TreeSet.add("D"); TreeSet.add("E"); List<String> valuesList = TreeSet.stream().collect(Collectors.toList()); System.out.println(valuesList); ``` 程序輸出: ```java [A, B, C, D, E] ``` ## 6\. `TreeSet`用例 `TreeSet`非常類似于`HashSet`(唯一元素),并提供可預測的迭代順序(排序)。 排序順序可以使用自定義比較器覆蓋。 `TreeSet`在引擎蓋下使用**紅黑樹**。 因此,該集合可以視為動態搜索樹。 當您需要一個經常進行讀寫操作并應保持秩序的結構時,`TreeSet`是一個不錯的選擇。 如果您想使集合保持排序,并且主要是在追加元素,那么帶`Comparator`的`TreeSet`是最好的選擇。 ## 7\. `TreeSet`性能 * `TreeSet`為基本操作(添加,刪除和包含)提供了保證的`log(n)`時間成本。 * 像對元素進行排序一樣的迭代操作需要花費`O(n)`的時間。 ## 8\. 總結 從上面的討論中可以明顯看出,在我們要以排序方式處理重復記錄的情況下,`TreeSet`是非常有用的集合類。 它還為基本操作提供了可預測的性能。 如果不需要元素的排序順序,則建議改用較輕量的`HashSet`和`HashMap`。 在評論中向我發送有關 Java 中 **`TreeSet`的問題**。 學習愉快! 參考: [`TreeSet` Java 文檔](https://docs.oracle.com/javase/10/docs/api/java/util/TreeSet.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看