<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java `TreeSet` > 原文: [https://www.programiz.com/java-programming/treeset](https://www.programiz.com/java-programming/treeset) #### 在本教程中,我們將借助示例學習 Java `TreeSet`類及其各種操作和方法。 Java 集合框架的`TreeSet`類提供樹數據結構的功能。 它擴展了[`NavigableSet`接口](/java-programming/navigableset "Java NavigableSet Interface")。 ![Java TreeSet class implements the NavigableSet interface.](https://img.kancloud.cn/44/6a/446a215b0d93530157e7f500795d9931_376x744.png) * * * ## 創建一個`TreeSet` 為了創建樹集,我們必須首先導入`java.util.TreeSet`包。 導入包后,可以使用以下方法在 Java 中創建`TreeSet`。 ```java TreeSet<Integer> numbers = new TreeSet<>(); ``` 在這里,我們創建了沒有任何參數的`TreeSet`。 在這種情況下,`TreeSet`中的元素會自然排序(升序)。 但是,我們可以使用`Comparator`接口自定義元素的排序。 我們將在本教程的后面部分中學習它。 * * * ## `TreeSet`的方法 `TreeSet`類提供了各種方法,使我們可以對設備執行各種操作。 * * * ## 將元素插入`TreeSet` * `add()` - 將指定的元素插入到集合中 * `addAll()` - 將指定集合的??所有元素插入集合 例如, ```java import java.util.TreeSet; class Main { public static void main(String[] args) { TreeSet<Integer> evenNumbers = new TreeSet<>(); // Using the add() method evenNumbers.add(2); evenNumbers.add(4); evenNumbers.add(6); System.out.println("TreeSet: " + evenNumbers); TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(1); // Using the addAll() method numbers.addAll(evenNumbers); System.out.println("New TreeSet: " + numbers); } } ``` **輸出** ```java TreeSet: [2, 4, 6] New TreeSet: [1, 2, 4, 6] ``` * * * ## 訪問`TreeSet`元素 要訪問樹集的元素,我們可以使用`iterator()`方法。 為了使用此方法,我們必須導入`java.util.Iterator`包。 例如, ```java import java.util.TreeSet; import java.util.Iterator; class Main { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("TreeSet: " + numbers); // Calling iterator() method Iterator<Integer> iterate = numbers.iterator(); System.out.print("TreeSet using Iterator: "); // Accessing elements while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } } ``` **輸出**: ```java TreeSet: [2, 5, 6] TreeSet using Iterator: 2, 5, 6, ``` * * * ## 刪除元素 * `remove()` - 從集合中刪除指定的元素 * `removeAll()` - 從集合中刪除所有元素 例如: ```java import java.util.TreeSet; class Main { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("TreeSet: " + numbers); // Using the remove() method boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); // Using the removeAll() method boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); } } ``` **輸出**: ```java TreeSet: [2, 5, 6] Is 5 removed? true Are all elements removed? true ``` * * * ## 用于導航的方法 由于`TreeSet`類實現了`NavigableSet`,因此它提供了各種方法來瀏覽樹集的元素。 ### 1\. `first()`和`last()`方法 * `first()` - 返回集合的第一個元素 * `last()` - 返回集合的最后一個元素 例如: ```java import java.util.TreeSet; class Main { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("TreeSet: " + numbers); // Using the first() method int first = numbers.first(); System.out.println("First Number: " + first); // Using the last() method int last = numbers.last(); System.out.println("Last Number: " + last); } } ``` **輸出**: ```java TreeSet: [2, 5, 6] First Number: 2 Last Number: 6 ``` * * * ### 2\. `ceiling()`,`floor()`,`higher()`和`lower()`方法 * **`upper(element)`** - 返回大于指定`element`的那些元素中的最低元素。 * **`lower(element)`** - 返回小于指定`element`的那些元素中最大的元素。 * **`ceiling(element)`** - 返回大于指定`element`的那些元素中的最低元素。 如果通過的`element`存在于樹集中,則它返回作為參數傳遞的`element`。 * **`floor(element)`** - 返回小于指定`element`的那些元素中最大的元素。 如果傳遞的`element`存在于樹集中,則它返回作為參數傳遞的`element`。 例如: ```java import java.util.TreeSet; class Main { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(2); numbers.add(5); numbers.add(4); numbers.add(6); System.out.println("TreeSet: " + numbers); // Using higher() System.out.println("Using higher: " + numbers.higher(4)); // Using lower() System.out.println("Using lower: " + numbers.lower(4)); // Using ceiling() System.out.println("Using ceiling: " + numbers.ceiling(4)); // Using floor() System.out.println("Using floor: " + numbers.floor(3)); } } ``` **輸出**: ```java TreeSet: [2, 4, 5, 6] Using higher: 5 Using lower: 2 Using ceiling: 4 Using floor: 2 ``` * * * ### 3\. `pollfirst()`和`pollLast()`方法 * `pollFirst()` - 返回并從集合中刪除第一個元素 * `pollLast()` - 返回并從集合中刪除最后一個元素 例如: ```java import java.util.TreeSet; class Main { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(2); numbers.add(5); numbers.add(4); numbers.add(6); System.out.println("TreeSet: " + numbers); // Using pollFirst() System.out.println("Removed First Element: " + numbers.pollFirst()); // Using pollLast() System.out.println("Removed Last Element: " + numbers.pollLast()); System.out.println("New TreeSet: " + numbers); } } ``` **輸出**: ```java TreeSet: [2, 4, 5, 6] Removed First Element: 2 Removed Last Element: 6 New TreeSet: [4, 5] ``` * * * ### 4\. `headSet()`,`tailSet()`和`subSet()`方法 * * * ### `headSet(element, booleanValue)` `headSet()`方法返回指定的`element`(作為參數傳遞)之前的樹集的所有元素。 `booleanValue`參數是可選的。 其默認值為`false`。 如果`true`作為`booleanValue`傳遞,則該方法返回指定元素之前的所有元素,包括指定元素。 例如: ```java import java.util.TreeSet; class Main { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(2); numbers.add(5); numbers.add(4); numbers.add(6); System.out.println("TreeSet: " + numbers); // Using headSet() with default boolean value System.out.println("Using headSet without boolean value: " + numbers.headSet(5)); // Using headSet() with specified boolean value System.out.println("Using headSet with boolean value: " + numbers.headSet(5, true)); } } ``` **輸出**: ```java TreeSet: [2, 4, 5, 6] Using headSet without boolean value: [2, 4] Using headSet with boolean value: [2, 4, 5] ``` * * * ### `tailSet(element, booleanValue)` `tailSet()`方法返回包含指定的`element`的指定`element`(作為參數傳遞)之后的樹集的所有元素。 `booleanValue`參數是可選的。 其默認值為`true`。 如果`false`作為`booleanValue`傳遞,則該方法返回指定的`element`之后的所有元素,而不包括指定的`element`。 例如: ```java import java.util.TreeSet; class Main { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(2); numbers.add(5); numbers.add(4); numbers.add(6); System.out.println("TreeSet: " + numbers); // Using tailSet() with default boolean value System.out.println("Using tailSet without boolean value: " + numbers.tailSet(4)); // Using tailSet() with specified boolean value System.out.println("Using tailSet with boolean value: " + numbers.tailSet(4, false)); } } ``` **輸出**: ```java TreeSet: [2, 4, 5, 6] Using tailSet without boolean value: [4, 5, 6] Using tailSet with boolean value: [5, 6] ``` * * * ### `subSet(e1, bv1, e2, bv2)` `subSet()`方法返回`e1`和`e2`之間的所有元素,包括`e1`。 `bv1`和`bv2`是可選參數。`bv1`的默認值為`true`,`bv2`的默認值為`false`。 如果`false`作為`bv1`傳遞,則該方法返回`e1`和`e2`之間的所有元素,但不包括`e1`。 如果`true`作為`bv2`傳遞,則該方法返回`e1`和`e2`之間的所有元素,包括`e1`。 例如: ```java import java.util.TreeSet; class Main { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(2); numbers.add(5); numbers.add(4); numbers.add(6); System.out.println("TreeSet: " + numbers); // Using subSet() with default boolean value System.out.println("Using subSet without boolean value: " + numbers.subSet(4, 6)); // Using subSet() with specified boolean value System.out.println("Using subSet with boolean value: " + numbers.subSet(4, false, 6, true)); } } ``` **輸出**: ```java TreeSet: [2, 4, 5, 6] Using subSet without boolean value: [4, 5] Using subSet with boolean value: [5, 6] ``` * * * ## 集的操作 `TreeSet`類的方法也可以用于執行各種設置操作。 * * * ### 并集 為了執行兩個集合之間的聯合,我們使用`addAll()`方法。 例如, ```java import java.util.TreeSet;; class Main { public static void main(String[] args) { TreeSet<Integer> evenNumbers = new TreeSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("TreeSet1: " + evenNumbers); TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); System.out.println("TreeSet2: " + numbers); // Union of two sets numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); } } ``` **輸出**: ```java TreeSet1: [2, 4] TreeSet2: [1, 2, 3] Union is: [1, 2, 3, 4] ``` * * * ### 交集 為了執行兩個集合之間的交集,我們使用`retainAll()`方法。 例如, ```java import java.util.TreeSet;; class Main { public static void main(String[] args) { TreeSet<Integer> evenNumbers = new TreeSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("TreeSet1: " + evenNumbers); TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); System.out.println("TreeSet2: " + numbers); // Intersection of two sets numbers.retainAll(evenNumbers); System.out.println("Intersection is: " + numbers); } } ``` **輸出**: ```java TreeSet1: [2, 4] TreeSet2: [1, 2, 3] Intersection is: [2] ``` * * * ### 差集 要計算兩組之間的差異,我們可以使用`removeAll()`方法。 例如, ```java import java.util.TreeSet;; class Main { public static void main(String[] args) { TreeSet<Integer> evenNumbers = new TreeSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("TreeSet1: " + evenNumbers); TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("TreeSet2: " + numbers); // Difference between two sets numbers.removeAll(evenNumbers); System.out.println("Difference is: " + numbers); } } ``` **輸出**: ```java TreeSet1: [2, 4] TreeSet2: [1, 2, 3, 4] Difference is: [1, 3] ``` * * * ### 集合的子集 為了檢查一個集合是否是另一個集合的子集,我們使用`containsAll()`方法。 例如, ```java import java.util.TreeSet; class Main { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("TreeSet1: " + numbers); TreeSet<Integer> primeNumbers = new TreeSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("TreeSet2: " + primeNumbers); // Check if primeNumbers is subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is TreeSet2 subset of TreeSet1? " + result); } } ``` **輸出**: ```java TreeSet1: [1, 2, 3, 4] TreeSet2: [2, 3] Is TreeSet2 subset of TreeSet1? True ``` * * * ## `TreeSet`的其他方法 | 方法 | 描述 | | --- | --- | | `clone()` | 創建`TreeSet`的副本 | | `contains()` | 在`TreeSet`中搜索指定的元素并返回布爾結果 | | `isEmpty()` | 檢查`TreeSet`是否為空 | | `size()` | 返回`TreeSet`的大小 | | `clear()` | 從`TreeSet`中刪除所有元素 | 要了解更多信息,請訪問 [Java `TreeSet`(Java 官方文檔)](https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html)。 * * * ## `TreeSet`和`HashSet` `TreeSet`和`HashSet`都實現`Set`接口。 但是,它們之間存在一些差異。 * 與`HashSet`不同,`TreeSet`中的元素以某種順序存儲。 這是因為`TreeSet`也實現了`SortedSet`接口。 * `TreeSet`提供了一些易于導航的方法。 例如`first()`,`last()`,`headSet(`,`tailSet()`等。這是因為`TreeSet`也實現了`NavigableSet`接口。 * 對于基本操作(例如添加,刪除,包含和調整大小),`HashSet`比`TreeSet`更快。 * * * ## `TreeSet`比較器 在以上所有示例中,樹集元素都是自然排序的。 但是,我們也可以自定義元素的順序。 為此,我們需要基于對樹集中的哪些元素進行排序來創建自己的比較器類。 例如, ```java import java.util.TreeSet; import java.util.Comparator; class Main { public static void main(String[] args) { // Creating a tree set with customized comparator TreeSet<String> animals = new TreeSet<>(new CustomComparator()); animals.add("Dog"); animals.add("Zebra"); animals.add("Cat"); animals.add("Horse"); System.out.println("TreeSet: " + animals); } // Creating a comparator class public static class CustomComparator implements Comparator<String> { @Override public int compare(String animal1, String animal2) { int value = animal1.compareTo(animal2); // elements are sorted in reverse order if (value > 0) { return -1; } else if (value < 0) { return 1; } else { return 0; } } } } ``` **輸出**: ```java TreeSet: [Zebra, Horse, Dog, Cat] ``` 在上面的示例中,我們創建了一個樹集,將`CustomComparator`類作為參數傳遞。 `CustomComparator`類實現`Comparator`接口。 然后,我們覆蓋`compare()`方法。 現在,該方法將以相反的順序對元素進行排序。 要了解更多信息,請訪問 [Java `Comparator`(Java 官方文檔)](https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.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>

                              哎呀哎呀视频在线观看