<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 `HashMap`指南 > 原文: [https://howtodoinjava.com/java-hashmap/](https://howtodoinjava.com/java-hashmap/) Java 中的`HashMap`在實現`Map`接口的集合類中。 它用于存儲**鍵值**對。 每個鍵都映射到映射中的單個值。 鍵是唯一的。 這意味著我們只能在映射中插入鍵`K`一次。 不允許重復的鍵。 雖然值`V`可以映射到多個鍵。 ## 1\. `java.util.HashMap`類 #### 1.1 `HashMap`類聲明 [`HashMap`](https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html)已聲明如下: ```java public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable ``` #### 1.2 `HashMap`類層次結構 如上所示,`HashMap`實現`Map`接口并擴展`AbstractMap`類。 ![HashMap Hierarchy](https://img.kancloud.cn/1c/ea/1ceaae2dfeabfd71a4c2dfae46441c82_161x203.png) `HashMap`層次結構 ## 2\. Java `HashMap`特性 * `HashMap`不能包含重復的鍵。 * `HashMap`允許多個`null`值,但只允許一個`null`鍵。 * `HashMap`是**無序集合**。 它不保證元素的任何特定順序。 * `HashMap`是**不是線程安全的**。 您必須顯式同步對`HashMap`的并發修改。 或者,您可以使用`Collections.synchronizedMap(hashMap)`來獲取`HashMap`的同步版本。 * 只能使用關聯的鍵來檢索值。 * `HashMap`僅存儲對象引用。 因此,必須將原始類型與其對應的包裝器類一起使用。 例如`int`將存儲為`Integer`。 * `HashMap`實現了`Clonable`和`serializable`接口。 ## 3\. `HashMap`內部實現 `HashMap`按照哈希原理工作。 在將任何公式/算法應用于其屬性之后,哈希是一種為任何變量/對象分配唯一代碼的方法。 Java 中的每個對象都有其**哈希碼**,這樣兩個相等的對象必須一致地產生相同的哈希碼。 #### 3.1 `HashMap.Entry`類 鍵值對存儲為內部類`HashMap.Entry`的實例,該內部類將鍵和值映射存儲為屬性。 鍵已標記為`final`。 ```java static class Entry<K ,V> implements Map.Entry<K, V> { final K key; V value; Entry<K ,V> next; final int hash; ...//More code goes here } ``` #### 3.2 內部工作 `Entry`類的所有實例都存儲在聲明為`transient Entry[] table`的數組中。 對于要存儲在`HashMap`中的每個鍵值,使用鍵的哈希碼計算哈希值。 該哈希值用于計算數組中用于存儲`Entry`對象的**索引**。 在**沖突**的情況下,其中多個鍵映射到單個索引位置,形成的**鏈表**用來存儲所有應該放在單個數組索引位置的所有鍵值對。 通過鍵檢索值時,使用鍵的哈希碼可以找到第一個索引位置。 然后,在鏈表中迭代所有元素,并使用`equals()`方法識別正確的鍵,從而找到正確的值對象。 ## 4\. Java `HashMap`示例 讓我們快速瀏覽一些示例,以在 Java 中使用`HashMap`。 #### 4.1 添加鍵值 – `HashMap.put()` ```java import java.util.HashMap; public class HashMapExample { public static void main(String[] args) throws CloneNotSupportedException { HashMap<Integer, String> map = new HashMap<>(); map.put(1, "A"); map.put(2, "B"); map.put(3, "C"); System.out.println(map); } } ``` 程序輸出。 ```java {1=A, 2=B, 3=C} ``` #### 4.2 通過鍵獲取值 – `HashMap.get()` ```java HashMap<Integer, String> map = new HashMap<>(); map.put(1, "A"); map.put(2, "B"); map.put(3, "C"); String value = map.get(2); System.out.println("The value is :: "+ value ); ``` 程序輸出: ```java The value is :: B ``` #### 4.3 通過鍵刪除偶對 – `HashMap.remove()` ```java HashMap<Integer, String> map = new HashMap<>(); map.put(1, "A"); map.put(2, "B"); map.put(3, "C"); System.out.println(map); map.remove(3); System.out.println(map); ``` 程序輸出: ```java {1=A, 2=B, 3=C} {1=A, 2=B} ``` #### 4.4 迭代`HashMap` 請注意,此類的迭代器為**快速失敗**,如果在創建迭代器后進行了任何結構修改,它將拋出`ConcurrentModificationException`。 ```java HashMap<Integer, String> map = new HashMap<>(); map.put(1, "A"); map.put(2, "B"); map.put(3, "C"); System.out.println("//Iterate over keys"); Iterator<Integer> itr = map.keySet().iterator(); while (itr.hasNext()) { Integer key = itr.next(); String value = map.get(key); System.out.println("The key is :: " + key + ", and value is :: " + value ); } System.out.println("//Iterate over entries set"); Iterator<Entry<Integer, String>> entryIterator = map.entrySet().iterator(); while (entryIterator.hasNext()) { Entry<Integer, String> entry = entryIterator.next(); System.out.println("The key is :: " + entry.getKey() + ", and value is :: " + entry.getValue() ); } ``` 程序輸出: ```java //Iterate over keys The key is :: 1, and value is :: A The key is :: 2, and value is :: B The key is :: 3, and value is :: C //Iterate over entries set The key is :: 1, and value is :: A The key is :: 2, and value is :: B The key is :: 3, and value is :: C ``` ## 5\. `HashMap`方法 HashMap 類中的方法列表及其簡短描述。 1. **`void clear()`**:從`HashMap`中刪除所有鍵值對。 2. **`Object clone()`**:返回指定`HashMap`的淺表副本。 3. **`boolean containsKey(Key key)`**:根據是否在映射中找到指定的鍵,返回`true`或`false`。 4. **`boolean containsValue(Value Value)`**:類似于`containsKey()`方法,它查找指定的值而不是鍵。 5. **`Value get(Key key)`**:返回`HashMap`中指定鍵的值。 6. **`boolean isEmpty()`**:檢查映射是否為空。 7. **`Set keySet()`**:返回`HashMap`中存儲的所有鍵的`Set`。 8. **`Object put(Key k, Value v)`**:將鍵值對插入`HashMap`中。 9. **`int size()`**:返回映射的大小,該大小等于存儲在`HashMap`中的鍵值對的數量。 10. **`Collection values()`**:返回映射中所有值的集合。 11. **`Value remove(Key key)`**:移除指定鍵的鍵值對。 12. **`void putAll(Map m)`**:將映射的所有元素復制到另一個指定的映射。 ## 6\. HashMap 教程和示例 * [`HashMap`在 Java 中的工作方式](https://howtodoinjava.com/java/collections/how-hashmap-works-in-java/) * [不同方式對`HashMap`進行迭代的性能比較](https://howtodoinjava.com/java/collections/performance-comparison-of-different-ways-to-iterate-over-hashmap/) * [如何為`HashMap`設計好的自定義鍵對象](https://howtodoinjava.com/java/collections/design-good-key-for-hashmap/) * [Java 中`HashMap`和`Hashtable`之間的區別](https://howtodoinjava.com/java/collections/difference-between-hashmap-and-a-hashtable/) * [Java 按鍵對映射進行排序(升序和降序)](https://howtodoinjava.com/sort/java-sort-map-by-key/) * [Java 按值對映射進行排序(升序和降序)](https://howtodoinjava.com/sort/java-sort-map-by-values/) * [Java `hashCode()`和`equals()` - 契約,規則和最佳做法](https://howtodoinjava.com/java/basics/java-hashcode-equals-methods/) * [`HashMap`和`ConcurrentHashMap`面試問題](https://howtodoinjava.com/interview-questions/hashmap-concurrenthashmap-interview-questions/) * [Java `ConcurrentHashMap`最佳實踐](https://howtodoinjava.com/java/multi-threading/best-practices-for-using-concurrenthashmap/) * [將 JSON 轉換為`Map`并映射為 JSON](https://howtodoinjava.com/jackson/jackson-json-to-from-hashmap/) * [Java 中的 Marshal 和 Unmarshal `HashMap`](https://howtodoinjava.com/jaxb/jaxb-example-marshalling-and-unmarshalling-hashmap-in-java/) * [如何使用`HashMap`查找字符串中的重復單詞](https://howtodoinjava.com/java/string/how-to-find-duplicate-words-in-a-string-in-java/) * [比較兩個`HashMap`](https://howtodoinjava.com/java/collections/hashmap/compare-two-hashmaps/) * [同步`HashMap`](https://howtodoinjava.com/java/collections/hashmap/synchronize-hashmap/) * [合并兩個`HashMaps`](https://howtodoinjava.com/java/collections/hashmap/merge-two-hashmaps/) * [如何克隆`HashMap`](https://howtodoinjava.com/java/collections/hashmap/shallow-deep-copy-hashmap/) 學習愉快!
                  <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>

                              哎呀哎呀视频在线观看