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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Java TreeMap > 原文: [https://www.programiz.com/java-programming/treemap](https://www.programiz.com/java-programming/treemap) #### 在本教程中,我們將借助示例學習 Java `TreeMap`類及其操作。 Java 集合框架的`TreeMap`類提供樹數據結構的實現。 它實現了[`NavigableMap`接口](/java-programming/navigablemap "Java NavigableMap Interface")。 ![Java TreeMap class implements the Map interface.](https://img.kancloud.cn/af/19/af191075fedc0accfe5e04794679d7c4_376x744.png) * * * ## 創建一個`TreeMap` 為了創建一個`TreeMap`,我們必須首先導入`java.util.TreeMap`包。 導入包后,可以使用以下方法在 Java 中創建`TreeMap`。 ```java TreeMap<Key, Value> numbers = new TreeMap<>(); ``` 在上面的代碼中,我們創建了一個名為`number`的`TreeMap`,沒有任何參數。 在這種情況下,`TreeMap`中的元素會自然排序(升序)。 但是,我們可以使用`Comparator`接口自定義元素的排序。 我們將在本教程的后面部分中學習它。 這里, * `key` - 用于關聯映射中每個元素(值)的唯一標識符 * `value` - 映射中與按鍵相關聯的元素 * * * ## `TreeMap`的方法 `TreeMap`類提供了各種方法,可讓我們在映射上執行操作。 * * * ## 將元素插入`TreeMap` * `put()` - 將指定的鍵/值映射(條目)插入到映射中 * `putAll()` - 將指定映射中的所有條目插入此映射中 * `putIfAbsent()` - 如果映射中不存在指定的鍵,則將指定的鍵/值映射插入到映射中 例如, ```java import java.util.TreeMap; class Main { public static void main(String[] args) { // Creating TreeMap of even numbers TreeMap<String, Integer> evenNumbers = new TreeMap<>(); // Using put() evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); // Using putIfAbsent() evenNumbers.putIfAbsent("Six", 6); System.out.println("TreeMap of even numbers: " + evenNumbers); //Creating TreeMap of numbers TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("One", 1); // Using putAll() numbers.putAll(evenNumbers); System.out.println("TreeMap of numbers: " + numbers); } } ``` **輸出** ```java TreeMap of even numbers: {Four=4, Six=6, Two=2} TreeMap of numbers: {Four=4, One=1, Six=6, Two=2} ``` * * * ## 訪問`TreeMap`元素 **1.使用`entrySet()`,`keySet()`和`values()`** * `entrySet()` - 返回樹形圖的所有鍵/值映射(條目)的集合 * `keySet()` - 返回樹形圖的所有鍵的集合 * `values()` - 返回樹形圖的所有圖的集合 例如: ```java import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("TreeMap: " + numbers); // Using entrySet() System.out.println("Key/Value mappings: " + numbers.entrySet()); // Using keySet() System.out.println("Keys: " + numbers.keySet()); // Using values() System.out.println("Values: " + numbers.values()); } } ``` **輸出**: ```java TreeMap: {One=1, Three=3, Two=2} Key/Value mappings: [One=1, Three=3, Two=2] Keys: [One, Three, Two] Values: [1, 3, 2] ``` **2.使用`get()`和`getOrDefault()`** * `get()` - 返回與指定鍵關聯的值。 如果找不到鍵,則返回`null`。 * `getOrDefault()` - 返回與指定鍵關聯的值。 如果找不到鍵,則返回指定的默認值。 例如: ```java import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("TreeMap: " + numbers); // Using get() int value1 = numbers.get("Three"); System.out.println("Using get(): " + value1); // Using getOrDefault() int value2 = numbers.getOrDefault("Five", 5); System.out.println("Using getOrDefault(): " + value2); } } ``` **輸出**: ```java TreeMap: {One=1, Three=3, Two=2} Using get(): 3 Using getOrDefault(): 5 ``` 在此,`getOrDefault()`方法找不到鍵`Five`。 因此,它返回指定的默認值`5`。 * * * ## 刪除`TreeMap`元素 * `remove(key)` - 返回并從`TreeMap`中刪除與指定鍵關聯的條目 * `remove(key, value)` - 僅在指定鍵與指定值相關聯并返回布爾值時,才從映射中刪除條目 例如: ```java import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("TreeMap: " + numbers); // remove method with single parameter int value = numbers.remove("Two"); System.out.println("Removed value: " + value); // remove method with two parameters boolean result = numbers.remove("Three", 3); System.out.println("Is the entry {Three=3} removed? " + result); System.out.println("Updated TreeMap: " + numbers); } } ``` **輸出**: ```java TreeMap: {One=1, Three=3, Two=2} Removed value = 2 Is the entry {Three=3} removed? True Updated TreeMap: {One=1} ``` * * * ## 替換`TreeMap`元素 * `replace(key, value)` - 用新的`value`替換由指定的`key`映射的值 * `replace(key, old, new)` - 僅當舊值已與指定鍵關聯時,才用新值替換舊值 * `replaceAll(function)` - 用指定的`function`的結果替換映射的每個值 例如: ```java import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); System.out.println("Original TreeMap: " + numbers); // Using replace() numbers.replace("Second", 22); numbers.replace("Third", 3, 33); System.out.println("TreeMap using replace: " + numbers); // Using replaceAll() numbers.replaceAll((key, oldValue) -> oldValue + 2); System.out.println("TreeMap using replaceAll: " + numbers); } } ``` **輸出**: ```java Original TreeMap: {First=1, Second=2, Third=3} TreeMap using replace(): {First=1, Second=22, Third=33} TreeMap using replaceAll(): {First=3, Second=24, Third=35} ``` 在上述程序中,聲明 ```java numbers.replaceAll((key, oldValue) -> oldValue + 2); ``` 在這里,我們傳遞了 [lambda 表達式](/java-programming/lambda-expression "Java lambda")作為參數。 `replaceAll()`方法訪問映射的所有條目。 然后,它將所有元素替換為新值(從 lambda 表達式返回)。 * * * ## 用于導航的方法 由于`TreeMap`類實現了`NavigableMap`,因此它提供了多種方法來瀏覽樹圖的元素。 ### 1.首先和最后的方法 * `firstKey()` - 返回映射的第一個鍵 * `firstEntry()` - 返回映射的第一個鍵的鍵/值映射 * `lastKey()` - 返回映射的最后一個鍵 * `lastEntry()` - 返回映射的最后一個鍵的鍵/值映射 例如: ```java import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); System.out.println("TreeMap: " + numbers); // Using the firstKey() method String firstKey = numbers.firstKey(); System.out.println("First Key: " + firstKey); // Using the lastKey() method String lastKey = numbers.lastKey(); System.out.println("Last Key: " + lastKey); // Using firstEntry() method System.out.println("First Entry: " + numbers.firstEntry()); // Using the lastEntry() method System.out.println("Last Entry: " + numbers.lastEntry()); } } ``` **輸出**: ```java TreeMap: {First=1, Second=2, Third=3} First Key: First Last Key: Third First Entry: First=1 Last Entry: Third=3 ``` * * * ### 2.上限,下限,上下限方法 * **`upperKey()`** - 返回大于指定鍵的那些鍵中的最低鍵。 * **`upperEntry()`** - 返回與所有大于指定鍵的鍵中最低的鍵相關的條目。 * **`lowerKey()`** - 返回所有小于指定鍵的最大鍵。 * **`lowerEntry()`** - 返回與所有小于指定鍵的鍵中最大的鍵關聯的條目。 * **`ceilingKey()`** - 返回大于指定鍵的那些鍵中的最低鍵。 如果映射中存在作為參數傳遞的鍵,則它將返回該鍵。 * **`ceilingEntry()`** - 返回與大于指定鍵的那些鍵中最低的鍵相關聯的條目。 如果映射中存在與傳遞給自變量的鍵關聯的條目,則它返回與該鍵關聯的條目。 * **`floorKey()`** - 返回小于指定鍵的那些鍵中最大的鍵。 如果存在作為參數傳遞的鍵,它將返回該鍵。 * **`floorEntry()`** - 返回與小于指定鍵的那些鍵中最大的鍵關聯的條目。 如果存在作為參數傳遞的鍵,它將返回該鍵。 例如: ```java import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 5); numbers.put("Third", 4); numbers.put("Fourth", 6); System.out.println("TreeMap: " + numbers); // Using higher() System.out.println("Using higherKey(): " + numbers.higherKey("Fourth")); System.out.println("Using higherEntry(): " + numbers.higherEntry("Fourth")); // Using lower() System.out.println("\nUsing lowerKey(): " + numbers.lowerKey("Fourth")); System.out.println("Using lowerEntry(): " + numbers.lowerEntry("Fourth")); // Using ceiling() System.out.println("\nUsing ceilingKey(): " + numbers.ceilingKey("Fourth")); System.out.println("Using ceilingEntry(): " + numbers.ceilingEntry("Fourth")); // Using floor() System.out.println("\nUsing floorKey(): " + numbers.floorKey("Fourth")); System.out.println("Using floorEntry(): " + numbers.floorEntry("Fourth")); } } ``` **輸出**: ```java TreeMap: {First=1, Fourth=6, Second=5, Third=4} Using higherKey(): Second Using higherEntry(): Second=5 Using lowerKey(): First Using lowerEntry(): First=1 Using ceilingKey(): Fourth Using ceilingEntry(): Fourth=6 Using floorkey(): Fourth Using floorEntry(): Fourth=6 ``` * * * ### 3\. `pollFirstEntry()`和`pollLastEntry()`方法 * `pollFirstEntry()` - 返回并刪除與映射的第一個鍵關聯的條目 * `pollLastEntry()` - 返回并刪除與映射的最后一個鍵關聯的條目 例如: ```java import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); System.out.println("TreeMap: " + numbers); //Using the pollFirstEntry() method System.out.println("Using pollFirstEntry(): " + numbers.pollFirstEntry()); // Using the pollLastEntry() method System.out.println("Using pollLastEntry(): " + numbers.pollLastEntry()); System.out.println("Updated TreeMap: " + numbers); } } ``` **輸出**: ```java TreeMap: {First=1, Second=2, Third=3} Using pollFirstEntry(): First=1 Using pollLastEntry(): Third=3 Updated TreeMap: {Second=2} ``` * * * ### 4\. `headMap()`,`tailMap()`和`subMap()`方法 **`headMap(key, booleanValue)`** `headMap()`方法返回指定的`key`(作為參數傳遞)之前的樹圖的所有鍵/值對。 `booleanValue`參數是可選的。 其默認值為`false`。 如果`true`作為`booleanValue`傳遞,則該方法還包括`key`的鍵/值對,該鍵/值對作為參數傳遞。 例如: ```java import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); numbers.put("Fourth", 4); System.out.println("TreeMap: " + numbers); System.out.println("\nUsing headMap() Method:"); // Using headMap() with default booleanValue System.out.println("Without boolean value: " + numbers.headMap("Fourth")); // Using headMap() with specified booleanValue System.out.println("With boolean value: " + numbers.headMap("Fourth", true)); } } ``` **輸出**: ```java TreeMap: {First=1, Fourth=4, Second=2, Third=3} Using headMap() Method: Without boolean value: {First=1} With boolean value: {First=1, Fourth=4} ``` **`tailMap(key, booleanValue)`** `tailMap()`方法返回從指定的`key`(作為參數傳遞)開始的樹形圖的所有鍵/值對。 `booleanValue`是可選參數。 其默認值為`true`。 如果`false`作為`booleanValue`傳遞,則該方法不包括指定的`key`的鍵/值對。 例如: ```java import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); numbers.put("Fourth", 4); System.out.println("TreeMap: " + numbers); System.out.println("\nUsing tailMap() Method:"); // Using tailMap() with default booleanValue System.out.println("Without boolean value: " + numbers.tailMap("Second")); // Using tailMap() with specified booleanValue System.out.println("With boolean value: " + numbers.tailMap("Second", false)); } } ``` **輸出**: ```java TreeMap: {First=1, Fourth=4, Second=2, Third=3} Using tailMap() Method: Without boolean value: {Second=2, Third=3} With boolean value: {Third=3} ``` **`subMap(k1, bV1, k2, bV2)`** `subMap()`方法返回與`k1`和`k2`之間的鍵相關聯的所有條目,包括`k1`的條目。 `bV1`和`bV2`是可選的布爾參數。`bV1`的默認值是`true`,`bV2`的默認值是`false`。 如果`false`作為`bV1`傳遞,則該方法返回與`k1`和`k2`之間的鍵相關聯的所有條目,而不包括`k1 [`。 如果將`true`作為`bV2`傳遞,則該方法返回與`k1`和`k2`之間的鍵相關聯的所有條目,包括`k2`的條目 ]。 例如: ```java import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); numbers.put("Fourth", 4); System.out.println("TreeMap: " + numbers); System.out.println("\nUsing subMap() Method:"); // Using subMap() with default booleanValue System.out.println("Without boolean value: " + numbers.subMap("Fourth", "Third")); // Using subMap() with specified booleanValue System.out.println("With boolean value: " + numbers.subMap("Fourth", false, "Third", true)); } } ``` **輸出**: ```java TreeMap: {First=1, Fourth=2, Second=2, Third=3} Using subMap() Method: Without boolean value: {Fourth=4, Second=2} With boolean value: {Second=2, Third=3} ``` * * * ## `TreeMap`的其他方法 | 方法 | 描述 | | --- | --- | | `clone()` | 創建`TreeMap`的副本 | | `containsKey()` | 在`TreeMap`中搜索指定的鍵,并返回布爾結果 | | `containsValue()` | 在`TreeMap`中搜索指定的值并返回布爾結果 | | `size()` | 返回`TreeMap`的大小 | | `clear()` | 從`TreeMap`中刪除所有條目 | * * * ## `TreeMap`比較器 在以上所有示例中,`treemap`元素都自然排序(以升序排列)。 但是,我們也可以自定義鍵的順序。 為此,我們需要基于對樹圖中的鍵進行排序的方式來創建自己的比較器類。 例如, ```java import java.util.TreeMap; import java.util.Comparator; class Main { public static void main(String[] args) { // Creating a treemap with a customized comparator TreeMap<String, Integer> numbers = new TreeMap<>(new CustomComparator()); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); numbers.put("Fourth", 4); System.out.println("TreeMap: " + numbers); } // Creating a comparator class public static class CustomComparator implements Comparator<String> { @Override public int compare(String number1, String number2) { int value = number1.compareTo(number2); // elements are sorted in reverse order if (value > 0) { return -1; } else if (value < 0) { return 1; } else { return 0; } } } } ``` **輸出**: ```java TreeMap: {Third=3, Second=2, Fourth=4, First=1} ``` 在上面的示例中,我們創建了一個樹形圖,將`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>

                              哎呀哎呀视频在线观看