<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國際加速解決方案。 廣告
                {% raw %} # Java `HashMap`教程 原文:http://zetcode.com/java/hashmap/ Java `HashMap`教程顯示了如何使用 Java `HashMap`集合。 ## Java `HashMap` `HashMap`是一個存儲鍵值對的容器。 每個鍵與一個值關聯。 `HashMap`中的鍵必須唯一。 `HashMap`在其他編程語言中稱為關聯數組或詞典。 `HashMaps`占用更多內存,因為每個值還有一個鍵。 刪除和插入操作需要固定的時間。 `HashMaps`可以存儲空值。 `HashMaps`不維持秩序。 `Map.Entry`表示`HashMap`中的鍵/值對。 `HashMap`的`entrySet()`返回包含在映射中的映射的`Set`視圖。 使用`keySet()`方法檢索一組鍵。 ## Java `HashMap`層次結構 `HashMap`擴展了`AbstractMap`并實現了`Map`。 `Map`提供了包括`get()`,`put()`,`size()`或`isEmpty()`的方法簽名。 ## Java `HashMap`構造器 * `HashMap()`-構造一個空的`HashMap()`,其默認初始容量(16)和默認負載因子(0.75)。 * `HashMap(int initialCapacity)`-構造一個空的`HashMap()`,具有給定的初始容量和默認的負載系數(0.75)。 * `HashMap(int initialCapacity, float loadFactor)`-使用給定的初始容量和負載因子構造一個空的`HashMap()`。 * `HashMap(Map<? extends K,? extends V> m)` —構造一個新的`HashMap()`,其映射與給定的`Map`相同。 `K`是映射鍵的類型,`V`是映射值的類型。 ## Java `HashMap`方法 下表提供了幾種`HashMap`方法。 | 修飾符和類型 | 方法 | 描述 | | --- | --- | --- | | `void` | `clear()` | 從映射中刪除所有映射。 | | `Object` | `clone()` | 返回`HashMap`實例的淺表副本:鍵和值本身不會被克隆。 | | `boolean` | `containsKey(Object key)` | 如果此映射包含指定鍵的映射,則返回`true`。 | | `Set<Map.Entry<K, V>>` | `entrySet()` | 返回此映射中包含的映射的`Set`視圖。 | | `boolean` | `isEmpty()` | 如果此映射為空,則返回`true`。 | | `Set<K>` | `keySet()` | 返回此映射中包含的鍵的`Set`視圖。 | | `V` | `put(K key, V value)` | 向映射添加新的映射。 | | `V` | `remove(Objec key)` | 如果存在,則從此映射中刪除指定鍵的映射。 | | `V` | `get(Object key)` | 返回指定鍵所映射到的值;如果此映射不包含鍵的映射關系,則返回`null`。 | | `void` | `forEach(BiConsumer<? super K, ? super V> action)` | 在此映射中為每個條目執行給定的操作,直到所有條目都已處理或該操作引發異常。 | | `V` | `replace(K key, V value)` | 僅當當前映射到某個值時,才替換指定鍵的條目。 | | `int` | `size()` | 返回此映射中的鍵值映射數。 | | `Collection<V>` | `values()` | 返回此映射中包含的值的`Collection`視圖。 | 在本教程中,我們將使用其中的幾種方法。 ## Java `HashMap`創建 用`new`關鍵字創建`HashMap`。 ```java Map<String, String> capitals = new HashMap<>(); ``` 我們在尖括號之間指定鍵的類型和值。 由于類型推斷,因此不必在聲明的右側提供類型。 ## Java `HashMap put()` `put()`方法用于向映射添加新的映射。 ```java capitals.put("svk", "Bratislava"); ``` 第一個參數是鍵,第二個是值。 ## Java `HashMap remove()` `remove()`方法用于從映射中刪除一對。 ```java capitals.remove("pol"); ``` 參數是要從映射中刪除其映射的鍵。 ## Java `HashMap`初始化 從 Java 9 開始,我們有了用于`HashMap`初始化的工廠方法。 `com/zetcode/HashMapInit.java` ```java package com.zetcode; import java.util.Map; import static java.util.Map.entry; // factory initialization methods since Java 9 public class HashMapInit { public static void main(String[] args) { // up to 10 elements: Map<Integer, String> colours = Map.of( 1, "red", 2, "blue", 3, "brown" ); System.out.println(colours); // any number of elements Map<String, String> countries = Map.ofEntries( entry("de", "Germany"), entry("sk", "Slovakia"), entry("ru", "Russia") ); System.out.println(countries); } } ``` 該示例使用`Map.of`和`Map.ofEntries`初始化哈希圖。 這兩個工廠方法返回不可修改的映射。 `com/zetcode/HashMapInit2.java` ```java package com.zetcode; import java.util.HashMap; import java.util.Map; // up to Java8 public class HashMapInit2 { public static void main(String[] args) { Map<String, String> countries = new HashMap<>() {{ put("de", "Germany"); put("sk", "Slovakia"); put("ru", "Russia"); }}; System.out.println(countries); } } ``` 在此示例中,我們創建了一個可修改的哈希圖。 這種初始化方式稱為雙括號哈希圖初始化。 ## Java `HashMap`大小示例 `HashMap`的大小由`size()`方法確定。 `com/zetcode/HashMapSize.java` ```java package com.zetcode; import java.util.HashMap; import java.util.Map; public class HashMapSize { public static void main(String[] args) { Map<String, String> capitals = new HashMap<>(); capitals.put("svk", "Bratislava"); capitals.put("ger", "Berlin"); capitals.put("hun", "Budapest"); capitals.put("czk", "Prague"); capitals.put("pol", "Warsaw"); capitals.put("ita", "Rome"); int size = capitals.size(); System.out.printf("The size of the HashMap is %d%n", size); capitals.remove("pol"); capitals.remove("ita"); size = capitals.size(); System.out.printf("The size of the HashMap is %d%n", size); } } ``` 在代碼示例中,我們創建`HashMap`并使用`size()`確定其大小。 然后,我們刪除一些對,然后再次確定其大小。 我們將發現結果打印到控制臺。 ```java capitals.put("svk", "Bratislava"); capitals.put("ger", "Berlin"); ``` 使用`put()`,我們將新的對添加到`HashMap`中。 ```java int size = capitals.size(); ``` 在這里,我們得到映射的大小。 ```java capitals.remove("pol"); capitals.remove("ita"); ``` 使用`remove()`,我們從映射中刪除了兩對。 ```java The size of the HashMap is 6 The size of the HashMap is 4 ``` 這是示例的輸出。 ## Java `HashMap get()` 要從`HashMap`檢索值,我們使用`get()`方法。 它以鍵作為參數。 `com/zetcode/HashMapRetrieve.java` ```java package com.zetcode; import java.util.HashMap; import java.util.Map; public class HashMapRetrieve { public static void main(String[] args) { Map<String, String> capitals = new HashMap<>(); capitals.put("svk", "Bratislava"); capitals.put("ger", "Berlin"); capitals.put("hun", "Budapest"); capitals.put("czk", "Prague"); capitals.put("pol", "Warsaw"); capitals.put("ita", "Rome"); String cap1 = capitals.get("ita"); String cap2 = capitals.get("svk"); System.out.println(cap1); System.out.println(cap2); } } ``` 在示例中,我們從映射中檢索兩個值。 ```java String cap2 = capitals.get("svk"); ``` 在這里,我們得到一個具有`"svk"`鍵的值。 ## Java `HashMap clear()` `clear()`方法從`HashMap`中刪除所有對。 `com/zetcode/HashMapClear.java` ```java package com.zetcode; import java.util.HashMap; import java.util.Map; public class HashMapClear { public static void main(String[] args) { Map<String, String> capitals = new HashMap<>(); capitals.put("svk", "Bratislava"); capitals.put("ger", "Berlin"); capitals.put("hun", "Budapest"); capitals.put("czk", "Prague"); capitals.put("pol", "Warsaw"); capitals.put("ita", "Rome"); capitals.clear(); if (capitals.isEmpty()) { System.out.println("The map is empty"); } else { System.out.println("The map is not empty"); } } } ``` 在該示例中,我們刪除了所有元素,并將映射的大小打印到控制臺。 ```java capitals.clear(); ``` 我們用`clear()`刪除所有對。 ```java if (capitals.isEmpty()) { System.out.println("The map is empty"); } else { System.out.println("The map is not empty"); } ``` 使用`isEmpty()`方法,我們檢查映射是否為空。 ## Java `HashMap containsKey()` 如果映射包含指定鍵的映射,則`containsKey()`方法返回`true`。 `com/zetcode/HashMapContainsKey.java` ```java package com.zetcode; import java.util.HashMap; import java.util.Map; public class HashMapContainsKey { public static void main(String[] args) { Map<String, String> capitals = new HashMap<>(); capitals.put("svk", "Bratislava"); capitals.put("ger", "Berlin"); capitals.put("hun", "Budapest"); capitals.put("czk", "Prague"); capitals.put("pol", "Warsaw"); capitals.put("ita", "Rome"); String key1 = "ger"; String key2 = "rus"; if (capitals.containsKey(key1)) { System.out.printf("HashMap contains %s key%n", key1); } else { System.out.printf("HashMap does not contain %s key%n", key1); } if (capitals.containsKey(key2)) { System.out.printf("HashMap contains %s key%n", key2); } else { System.out.printf("HashMap does not contain %s key%n", key2); } } } ``` 在示例中,我們檢查映射是否包含兩個鍵。 ```java if (capitals.containsKey(key1)) { System.out.printf("HashMap contains %s key%n", key1); } else { System.out.printf("HashMap does not contain %s key%n", key1); } ``` 該`if`語句根據映射是否包含給定鍵輸出消息。 ```java HashMap contains ger key HashMap does not contain rus key ``` 這是輸出。 ## Java `HashMap replace()` 有`replace()`方法使程序員可以替換條目。 ```java replace(K key, V value) ``` 僅當當前映射到某個值時,此方法才替換指定鍵的條目。 ```java replace(K key, V oldValue, V newValue) ``` 僅當當前映射到指定值時,此方法才替換指定鍵的條目。 `com/zetcode/HashMapReplace.java` ```java package com.zetcode; import java.util.HashMap; import java.util.Map; public class HashMapReplace { public static void main(String[] args) { Map<String, String> capitals = new HashMap<>(); capitals.put("day", "Monday"); capitals.put("country", "Poland"); capitals.put("colour", "blue"); capitals.replace("day", "Sunday"); capitals.replace("country", "Russia", "Great Britain"); capitals.replace("colour", "blue", "green"); capitals.entrySet().forEach(System.out::println); } } ``` 在示例中,我們將映射中的對替換為`replace()`。 ```java capitals.replace("day", "Sunday"); ``` 在這里,我們替換`"day"`鍵的值。 ```java capitals.replace("country", "Russia", "Great Britain"); ``` 在這種情況下,由于鍵當前未設置為`"Russia"`,因此不會替換該值。 ```java capitals.replace("colour", "blue", "green"); ``` 由于舊值正確,因此將替換該值。 ```java country=Poland colour=green day=Sunday ``` 這是輸出。 ## Java `HashMap`轉換為`List` 在下一個示例中,我們將`HashMap`條目轉換為條目列表。 `com/zetcode/HashMapConvert.java` ```java package com.zetcode; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; public class HashMapConvert { public static void main(String[] args) { Map<String, String> colours = Map.of( "AliceBlue", "#f0f8ff", "GreenYellow", "#adff2f", "IndianRed", "#cd5c5c", "khaki", "#f0e68c" ); Set<Map.Entry<String, String>> entries = colours.entrySet(); List<Map.Entry<String, String>> mylist = new ArrayList<>(entries); System.out.println(mylist); } } ``` `entrySet()`返回映射的設置視圖,該視圖隨后傳遞給`ArrayList`的構造器。 ## 使用`forEach()`迭代`HashMap` 我們使用 Java8 `forEach()`方法來迭代`HashMap`的鍵值對。 `forEach()`方法對映射的每個元素執行給定的操作,直到所有元素都已處理或該操作引發異常。 `com/zetcode/HashMapForEach.java` ```java package com.zetcode; import java.util.HashMap; import java.util.Map; public class HashMapForEach { public static void main(String[] args) { Map<String, String> capitals = new HashMap<>(); capitals.put("svk", "Bratislava"); capitals.put("ger", "Berlin"); capitals.put("hun", "Budapest"); capitals.put("czk", "Prague"); capitals.put("pol", "Warsaw"); capitals.put("ita", "Rome"); capitals.forEach((k, v) -> System.out.format("%s: %s%n", k, v)); } } ``` 在代碼示例中,我們使用 lambda 表達式迭代了`HashMap`和`forEach()`。 ```java capitals.forEach((k, v) -> System.out.format("%s: %s%n", k, v)); ``` 使用`forEach()`,我們遍歷了映射的所有對。 ## 使用增強的`for`循環迭代`HashMap` Java 5 中引入的增強的`for`循環可用于對`HashMap`進行迭代。 `com/zetcode/HashMapEnhancedFor.java` ```java package com.zetcode; import java.util.HashMap; import java.util.Map; public class HashMapEnhancedFor { public static void main(String[] args) { Map<String, String> capitals = new HashMap<>(); capitals.put("svk", "Bratislava"); capitals.put("ger", "Berlin"); capitals.put("hun", "Budapest"); capitals.put("czk", "Prague"); capitals.put("pol", "Warsaw"); capitals.put("ita", "Rome"); for (Map.Entry<String, String> pair: capitals.entrySet()) { System.out.format("%s: %s%n", pair.getKey(), pair.getValue()); } } } ``` 在該示例中,我們迭代具有增強的`for`循環的`HashMap`。 ```java for (Map.Entry<String, String> pair: capitals.entrySet()) { System.out.format("%s: %s%n", pair.getKey(), pair.getValue()); } ``` 在每個`for`周期中,都將新的鍵值對分配給`pair`變量。 ## Java `HashMap`迭代鍵 我們可能只想遍歷`HashMap`的鍵。 `com/zetcode/HashMapKeys.java` ```java package com.zetcode; import java.util.HashMap; import java.util.Map; import java.util.Set; public class HashMapKeys { public static void main(String[] args) { Map<String, String> capitals = new HashMap<>(); capitals.put("svk", "Bratislava"); capitals.put("ger", "Berlin"); capitals.put("hun", "Budapest"); capitals.put("czk", "Prague"); capitals.put("pol", "Warsaw"); capitals.put("ita", "Rome"); Set<String> keys = capitals.keySet(); keys.forEach(System.out::println); } } ``` 該示例迭代`capitals`映射的鍵。 ```java Set<String> keys = capitals.keySet(); ``` 用`keySet()`方法檢索`HashMap`的鍵,該方法返回鍵`Set`。 鍵必須唯一; 因此,我們有一個`Set`。 `Set`是一個不包含重復元素的集合。 ```java keys.forEach(System.out::println); ``` 我們用`forEach()`遍歷鍵集。 ## Java `HashMap`迭代值 我們可能只想對`HashMap`的值進行迭代。 `com/zetcode/HashMapValues.java` ```java package com.zetcode; import java.util.Collection; import java.util.HashMap; import java.util.Map; public class HashMapValues { public static void main(String[] args) { Map<String, String> capitals = new HashMap<>(); capitals.put("svk", "Bratislava"); capitals.put("ger", "Berlin"); capitals.put("hun", "Budapest"); capitals.put("czk", "Prague"); capitals.put("pol", "Warsaw"); capitals.put("ita", "Rome"); Collection<String> vals = capitals.values(); vals.forEach(System.out::println); } } ``` 該示例迭代`HashMap`的值。 ```java Collection<String> vals = capitals.values(); ``` `HashMap`的值通過`values()`方法檢索。 ```java vals.forEach(System.out::println); ``` 我們使用`forEach()`遍歷集合。 ## `HashMap`過濾 可以使用 Java 流 API 的`filter()`方法過濾`HashMap`。 `com/zetcode/HashMapFilter.java` ```java package com.zetcode; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; public class HashMapFilter { public static void main(String[] args) { Map<String, String> capitals = new HashMap<>(); capitals.put("svk", "Bratislava"); capitals.put("ger", "Berlin"); capitals.put("hun", "Budapest"); capitals.put("czk", "Prague"); capitals.put("pol", "Warsaw"); capitals.put("ita", "Rome"); Map<String, String> filteredCapitals = capitals.entrySet().stream() .filter(map -> map.getValue().length() == 6) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); filteredCapitals.entrySet().forEach(System.out::println); } } ``` 在示例中,我們將映射過濾為僅包含值大小等于 6 的對。 ```java czk=Prague ger=Berlin pol=Warsaw ``` 這是輸出。 ## 其他語言的 Java `HashMap`等效項 Ruby 具有哈希,Perl 具有哈希,PHP 具有數組,Python 具有字典,C# 具有字典,JavaScript 具有映射。 `ruby_hash.rb` ```java #!/usr/bin/ruby stones = { 1 => "garnet", 2 => "topaz", 3 => "opal", 4 => "amethyst" } stones.each { |k, v| puts "Key: #{k}, Value: #{v}" } ``` 這是 Ruby 中的哈希。 `perl_hash.py` ```java #!/usr/bin/perl my %stones = ( 1 => "garnet", 2 => "topaz", 3 => "opal", 4 => "amethyst" ); while ( my ($k, $v) = each %stones ) { print "$k: $v\n"; } ``` 這是一個 Perl 哈希。 `php_array.php` ```java <?php $stones = [ 1 => "garnet", 2 => "topaz", 3 => "opal", 4 => "amethyst" ]; foreach ($stones as $key => $value) { echo "$key: $value\n"; } ?> ``` 這是一個 PHP 數組。 `python_dictionary.py` ```java #!/usr/bin/python stones = { 1 : "garnet", 2 : "topaz", 3 : "opal", 4 : "amethyst" } for key, value in stones.items(): print("{}: {}".format(key, value)) ``` 這是 Python 字典。 `csharp_dictionary.cs` ```java using System; using System.Collections.Generic; public class DictionaryExample { static void Main() { Dictionary<int, string> stones = new Dictionary<int, string> { { 1, "garnet" }, { 2, "topaz" }, { 3, "opal" }, { 4, "amethyst" }, }; Console.WriteLine("Keys and values of the dictionary:"); foreach(KeyValuePair<int, string> kvp in stones) { Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value); } } } ``` 這是 C# 詞典。 `javascript_map.js` ```java var stones = new Map(); stones.set(1, 'garnet'); stones.set(2, 'topaz'); stones.set(3, 'opal'); stones.set(4, 'amethyst'); stones.forEach(function(value, key) { console.log(key + ': ' + value); }); ``` 這是一個 JavaScript 映射。 在本教程中,我們介紹了 Java `HashMap`集合。 您可能也對相關教程感興趣: [Java 中的`HashMap`迭代](/java/hashmapiterate/), [Java `ArrayList`教程](/articles/javaarraylist/), [Java `HashSet`教程](/java/hashset), [Java `static`關鍵字](/java/statickeyword/) 和 [Java 教程](/lang/java/)。 列出[所有 Java 教程](/all/#java)。 {% endraw %}
                  <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>

                              哎呀哎呀视频在线观看