<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 `TreeMap`類 > 原文: [https://howtodoinjava.com/java/collections/treemap-class/](https://howtodoinjava.com/java/collections/treemap-class/) Java 中的`TreeMap`用于存儲非常類似于[`HashMap`](https://howtodoinjava.com/java-hashmap/)類的鍵值對。 區別在于`TreeMap`提供了一種有效的方式來**以排序的順序**存儲鍵/值對。 這是基于**紅黑樹**的`NavigableMap`實現。 在本 **Java `TreeMap`教程**中,我們將學習`TreeMap`類,其方法,用例和其他重要細節。 ```java Table of Contents 1\. TreeMap Hierarchy 2\. TreeMap Features 3\. TreeMap Constructors 4\. TreeMap Methods 5\. TreeMap Example 6\. TreeMap Usecases 7\. TreeMap Performance 8\. Concurrency in TreeMap 9\. Conclusion ``` ## 1\. `TreeMap`層次結構 在 Java 中,`TreeMap`類的聲明如下。 它擴展了`AbstractMap`類,并且實現了`NavigableMap`接口。 `'K'`是鍵的類型,`'V'`是鍵的映射值的類型。 ```java public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable { //implementation } ``` ## 2\. `TreeMap`特性 關于 Java `TreeMap`類的要點是: * 它存儲類似于`HashMap`的鍵/值對。 * 它僅允許不同的鍵。 重復的密鑰是不可能的。 * 它不能具有`null`鍵,但是可以具有多個`null`值。 * 它按排序順序(自然順序)或在映射創建時提供的[`Comparator`](https://howtodoinjava.com/sort/sort-arraylist-objects-comparable-comparator/)存儲鍵。 * 它為`containsKey`,`get`,`put`和`remove`操作提供了有保證的`log(n)`時間成本。 * 它不是[同步的](https://howtodoinjava.com/java/multi-threading/what-is-thread-safety/)。 使用`Collections.synchronizedSortedMap(new TreeMap())`在并發環境中工作。 * 通過`iterator`方法返回的迭代器是**快速失敗**。 ## 3\. `TreeMap`構造器 `TreeMap`具有五種構造器: 1. **`TreeMap()`**:使用其鍵的自然順序創建一個新的空樹映射。 2. **`TreeMap(Comparator c)`**:創建一個新的空樹映射,根據給定的比較器排序。 3. **`TreeMap(Map map)`**:創建一個新的樹映射,其中包含與給定映射相同的映射,并根據其鍵的自然順序進行排序。 4. **`TreeMap(SortedMap map)`**:創建一個新的樹映射,其中包含與指定的已排序映射相同的映射并使用相同的順序。 ## 4\. `TreeMap`方法 我們應該了解的有關`TreeMap`的重要方法如下: 1. **`void clear()`**:它將從映射中刪除所有鍵值對。 2. **`void size()`**:它返回此映射中存在的鍵/值對的數量。 3. **`void isEmpty()`**:如果此映射不包含鍵值映射,則返回`true`。 4. **`boolean containsKey(Object key)`**:如果映射中存在指定的鍵,則返回`'true'`。 5. **`boolean containsValue(Object key)`**:如果將指定值映射到映射中的至少一個鍵,則返回`'true'`。 6. **`Object get(Object key)`**:它檢索由指定的`key`映射的`value`,如果此映射不包含該鍵的映射,則返回`null`。 7. **`Object remove(Object key)`**:如果存在,它將從映射中刪除指定鍵的鍵值對。 8. **`Comparator comparator()`**:它返回用于對映射中的鍵進行排序的比較器;如果此映射使用其鍵的自然順序,則返回 null。 9. **`Object firstKey()`**:返回樹圖中當前的第一個(最小)鍵。 10. **`Object lastKey()`**:返回樹圖中當前的最后一個(最大)鍵。 11. **`Object ceilingKey(Object key)`**:它返回大于或等于給定鍵的最小鍵;如果沒有這樣的鍵,則返回`null`。 12. **`Object HigherKey(Object key)`**:返回嚴格大于指定鍵的最小鍵。 13. **`NavigableMapDescendingMap()`**:它返回此映射中包含的映射的**逆序視圖**。 ## 5\. Java `TreeMap`示例 #### 5.1 自然排序的`TreeMap`示例 Java 程序,以自然順序演示`TreeMap`方法的用法。 ```java import java.util.Iterator; import java.util.TreeMap; public class LinkedHashMapExample { public static void main(String[] args) { //Natual ordering by deafult TreeMap<Integer, String> pairs = new TreeMap<>(); pairs.put(2, "B"); pairs.put(1, "A"); pairs.put(3, "C"); String value = pairs.get(3); //get method System.out.println(value); value = pairs.getOrDefault(5, "oops"); //getOrDefault method System.out.println(value); //Iteration example Iterator<Integer> iterator = pairs.keySet().iterator(); while(iterator.hasNext()) { Integer key = iterator.next(); System.out.println("Key: " + key + ", Value: " + pairs.get(key)); } //Remove example pairs.remove(3); System.out.println(pairs); System.out.println(pairs.containsKey(1)); //containsKey method System.out.println(pairs.containsValue("B")); //containsValue method System.out.println(pairs.ceilingKey(2)); } } ``` 程序輸出。 ```java C oops Key: 1, Value: A Key: 2, Value: B Key: 3, Value: C {1=A, 2=B} true true 2 ``` #### 5.2 使用比較器自定義順序的`TreeMap`示例 ```java import java.util.Iterator; import java.util.TreeMap; public class LinkedHashMapExample { public static void main(String[] args) { //Sort keys in reverse order TreeMap<Integer, String> pairs = new TreeMap<>(Collections.reverseOrder()); pairs.put(2, "B" ); pairs.put(1, "A"); pairs.put(3, "C"); System.out.println(pairs); } } ``` 程序輸出: ```java {3=C, 2=B, 1=A} ``` ## 6\. `TreeMap`用例 無論是使用默認排序還是使用比較器進行自定義排序,`TreeMap`都提供了一種有效的方法來以排序的方式存儲和檢索其中包含的信息。 這使其成為在需要按順序顯示信息的情況下使用的出色工具。 例如,在任何移動應用程序中,員工基于其年齡或電話號碼的信息。 另一個有用的用例可以是字典,在字典中以分類的方式記錄和顯示信息。 實際上,它們在需要對信息進行分類并且需要快速隨機訪問的任何地方都非常有用。 如果不需要隨機訪問,則使用排序集或列表。 ## 7\. `TreeMap`的性能 `TreeMap`為大多數操作(如`add()`,`remove()`和`contains()`)提供`log(n)`的性能。 `HashMap`對于相同的操作執行時性能為`O(1)`。 這樣,`HashMap`的性能就比`TreeMap`好得多。 `TreeMap`在內存管理中具有更好的性能,因為它不在內部維護數組來存儲鍵值對。 在`HashMap`中,數組大小是在初始化或調整大小時確定的,如果確定大小通常超過當時的需要。 它浪費了內存。 `TreeMap`沒有這種問題。 ## 8\. `TreeMap`中的并發 `Map`,`HashMap`和`TreeMap`的兩個版本均未同步,程序員需要管理對映射的并發訪問。 我們可以使用`Collections.synchronizedSortedMap(new TreeMap())`明確獲取樹圖的同步視圖。 ```java Map<Integer, String> syncTreeMap = Collections.synchronizedSortedMap(new TreeMap<Integer, String>()); syncTreeMap.put(1, "A"); syncTreeMap.put(2, "B" ); syncTreeMap.put(3, "C"); ``` ## 9\. 總結 在本教程中,我們了解了 Java `TreeMap`類及其內部。 我們看到了它如何以自然方式(默認)或某些自定義鍵順序(使用提供的比較器)以排序方式存儲鍵值對。 我們討論了在實時應用程序中應如何以及何時使用`TreeMap`。 我們將`TreeMap`和`HashMap`的性能進行了比較,以更好地了解何時使用哪個版本的`Map`。 在注釋部分中,將您有關在 Java 中使用`TreeMap`的問題提供給我。 學習愉快! 參考: [`TreeMap` Java 文檔](https://docs.oracle.com/javase/10/docs/api/java/util/TreeMap.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>

                              哎呀哎呀视频在线观看