當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Map用法及代碼示例


在Java中,java.util包中存在Map接口,表示鍵和值之間的映射。 Java Map 接口不是 Collection interface 的子類型。因此,它的行為與其他集合類型有點不同。映射包含唯一的鍵。

極客們,集思廣益應該討論為什麽以及何時使用Map。

映射非常適合用於鍵值關聯映射,例如字典。這些映射用於通過鍵執行查找,或者當有人想要通過鍵檢索和更新元素時。一些常見的場景如下:

  • 錯誤代碼及其說明的映射。
  • 郵政編碼和城市的Map。
  • 經理和員工的Map。每個經理(鍵)都與其管理的員工(值)列表相關聯。
  • 類和學生的Map。每個類(鍵)都與一個學生列表(值)相關聯。

Map Interface in Java

創建Map對象

由於 Map 是 interface ,因此無法創建 Map 類型的對象。我們總是需要一個擴展這個映射的類來創建一個對象。而且,在Java 1.5中引入Generics之後,可以限製Map中可以存儲的對象類型。

用法:定義類型安全映射

Map hm = new HashMap(); 
// Obj is the type of the object to be stored in Map

Map接口的特點

  1. Map 不能包含重複的鍵,並且每個鍵最多可以映射到一個值。某些實現允許空鍵和空值,例如 HashMapLinkedHashMap ,但有些實現不喜歡 TreeMap
  2. 映射的順序取決於具體的實現。例如,TreeMapLinkedHashMap 具有可預測的順序,而 HashMap 則沒有。
  3. Java 中有兩個實現 Map 的接口。它們是 Map 和 SortedMap ,以及三個類:HashMap、TreeMap 和 LinkedHashMap。

Java Map 接口中的方法

方法 執行的操作
Map clear() 此方法在 Java Map Interface 中用於清除和刪除指定 Map 集合中的所有元素或映射。
Map containsKey() Java 中的 Map 接口使用此方法來檢查特定鍵是否已映射到 Map 中。它將關鍵元素作為參數,如果該元素已映射到映射中,則返回 True。
Map containsValue() Map 接口中使用此方法來檢查特定值是否由 Map 中的單個或多個鍵映射。它將該值作為參數,如果該值由映射中的任何鍵映射,則返回 True。
Map entrySet() Java 的Map接口中使用此方法來創建Map中包含的相同元素的集合。它本質上返回Map的集合視圖,或者我們可以創建一個新集合並將Map元素存儲到其中。
Map equals() Java Map Interface 中使用此方法來檢查兩個映射之間的相等性。它驗證作為參數傳遞的一個映射的元素是否等於該映射的元素。
Map get() 此方法用於檢索或獲取參數中提到的特定鍵映射的值。當映射不包含鍵的此類映射時,它返回 NULL。
Map hashCode() 該方法在 Map 接口中用於為包含鍵和值的給定映射生成 hashCode。
Map isEmpty() 此方法用於檢查映射是否有任何鍵和值對的條目。如果不存在映射,則返回 true。
Map keySet() 此方法在 Map Interface 中用於返回此映射中包含的鍵的 Set 視圖。該集合由Map支持,因此對Map的更改會反映在集合中,反之亦然。
Map put() Java Map Interface 中使用此方法將指定值與此映射中的指定鍵關聯起來。
Map putAll() Java 中的 Map 接口使用此方法將指定映射中的所有映射複製到此映射。
Map remove() 此方法在映射接口中用於從該映射中刪除鍵的映射(如果該鍵存在於映射中)。
HashMap size() 此方法用於返回映射中可用的鍵/值對的數量。
HashMap values() Java Map接口中使用此方法來創建Map值的集合。它本質上返回 HashMap 中值的集合視圖。
HashMap getOrDefault(key, defaultValue) 返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 defaultValue。
HashMap merge(key, value, BiFunction) 如果指定的鍵尚未與值關聯或與 null 關聯,則將其與給定的非 null 值關聯。
HashMap putIfAbsent(key, value) 如果指定的鍵尚未與值關聯(或映射為 null),則將其與給定值關聯並返回 null,否則返回當前關聯值。

例子:

Java


// Java Program to Demonstrate 
// Working of Map interface 
  
// Importing required classes 
import java.util.*; 
  
// Main class 
class GFG { 
  
    // Main driver method 
    public static void main(String args[]) 
    { 
        // Creating an empty HashMap 
        Map<String, Integer> hm 
            = new HashMap<String, Integer>(); 
  
        // Inserting pairs in above Map 
        // using put() method 
        hm.put("a", new Integer(100)); 
        hm.put("b", new Integer(200)); 
        hm.put("c", new Integer(300)); 
        hm.put("d", new Integer(400)); 
  
        // Traversing through Map using for-each loop 
        for (Map.Entry<String, Integer> me : 
             hm.entrySet()) { 
  
            // Printing keys 
            System.out.print(me.getKey() + ":"); 
            System.out.println(me.getValue()); 
        } 
    } 
}
輸出:
a:100
b:200
c:300
d:400

實現Map接口的類在下麵的媒體中說明,稍後說明如下:

Map interface

1. 哈希映射

HashMap 是 Java 1.2 以來 Java 集合的一部分。它提供了Java Map接口的基本實現。它將數據存儲在(鍵,值)對中。要訪問一個值,必須知道它的鍵。此類使用名為 Hashing 的技術。散列是一種將大字符串轉換為表示相同字符串的小字符串的技術。較短的值有助於索引和更快的搜索。讓我們看看如何使用此類創建Map對象。

示例

Java


// Java Program to illustrate the Hashmap Class 
  
// Importing required classes 
import java.util.*; 
  
// Main class 
public class GFG { 
  
    // Main driver method 
    public static void main(String[] args) 
    { 
  
        // Creating an empty HashMap 
        Map<String, Integer> map = new HashMap<>(); 
  
        // Inserting entries in the Map 
        // using put() method 
        map.put("vishal", 10); 
        map.put("sachin", 30); 
        map.put("vaibhav", 20); 
  
        // Iterating over Map 
        for (Map.Entry<String, Integer> e : map.entrySet()) 
  
            // Printing key-value pairs 
            System.out.println(e.getKey() + " "
                               + e.getValue()); 
    } 
}
輸出
vaibhav 20
vishal 10
sachin 30

2.LinkedHashMap

LinkedHashMap 就像HashMap 一樣,具有維護插入其中的元素順序的附加函數。 HashMap 提供了快速插入、搜索和刪除的優點,但它從未保持 LinkedHashMap 提供的插入軌道和順序,其中可以按插入順序訪問元素。讓我們看看如何使用此類創建Map對象。

示例

Java


// Java Program to Illustrate the LinkedHashmap Class 
  
// Importing required classes 
import java.util.*; 
  
// Main class 
public class GFG { 
  
    // Main driver method 
    public static void main(String[] args) 
    { 
  
        // Creating an empty LinkedHashMap 
        Map<String, Integer> map = new LinkedHashMap<>(); 
  
        // Inserting pair entries in above Map 
        // using put() method 
        map.put("vishal", 10); 
        map.put("sachin", 30); 
        map.put("vaibhav", 20); 
  
        // Iterating over Map 
        for (Map.Entry<String, Integer> e : map.entrySet()) 
  
            // Printing key-value pairs 
            System.out.println(e.getKey() + " "
                               + e.getValue()); 
    } 
}
輸出
vishal 10
sachin 30
vaibhav 20

3.TreeMap

TreeMap in Java 用於實現 Map 接口,NavigableMap 以及抽象類。映射根據其鍵的自然順序進行排序,或者通過映射創建時提供的比較器進行排序,具體取決於使用的構造函數。事實證明,這是一種排序和存儲鍵值對的有效方法。樹形圖維護的存儲順序必須與 equals 一致,就像任何其他排序的映射一樣,無論顯式比較器如何。讓我們看看如何使用此類創建Map對象。

示例

Java


// Java Program to Illustrate TreeMap Class 
  
// Importing required classes 
import java.util.*; 
  
// Main class 
public class GFG { 
  
    // Main driver method 
    public static void main(String[] args) 
    { 
  
        // Creating an empty TreeMap 
        Map<String, Integer> map = new TreeMap<>(); 
  
        // Inserting custom elements in the Map 
        // using put() method 
        map.put("vishal", 10); 
        map.put("sachin", 30); 
        map.put("vaibhav", 20); 
  
        // Iterating over Map using for each loop 
        for (Map.Entry<String, Integer> e : map.entrySet()) 
  
            // Printing key-value pairs 
            System.out.println(e.getKey() + " "
                               + e.getValue()); 
    } 
}
輸出
sachin 30
vaibhav 20
vishal 10

使用執行操作Map接口HashMap 類

由於 Map 是一個接口,因此它隻能與實現該接口的類一起使用。現在,讓我們看看如何使用廣泛使用的 HashMap class 在 Map 上執行一些常用操作。而且,在Java 1.5中引入Generics之後,可以限製可以存儲在映射中的對象的類型。

1. 添加元素

為了向Map添加元素,我們可以使用put() method。但是,插入順序不會保留在哈希圖中。在內部,對於每個元素,都會生成一個單獨的哈希值,並根據該哈希值對元素進行索引,以提高效率。

示例

Java


// Java program to demonstrate 
// the working of Map interface 
  
import java.util.*; 
class GFG { 
    public static void main(String args[]) 
    { 
        // Default Initialization of a 
        // Map 
        Map<Integer, String> hm1 = new HashMap<>(); 
  
        // Initialization of a Map 
        // using Generics 
        Map<Integer, String> hm2 
            = new HashMap<Integer, String>(); 
  
        // Inserting the Elements 
        hm1.put(1, "Geeks"); 
        hm1.put(2, "For"); 
        hm1.put(3, "Geeks"); 
  
        hm2.put(new Integer(1), "Geeks"); 
        hm2.put(new Integer(2), "For"); 
        hm2.put(new Integer(3), "Geeks"); 
  
        System.out.println(hm1); 
        System.out.println(hm2); 
    } 
}
輸出
{1=Geeks, 2=For, 3=Geeks}
{1=Geeks, 2=For, 3=Geeks}

2. 改變元素

添加元素後,如果我們想更改元素,可以通過再次添加帶有 put() method. 的元素來完成。由於映射中的元素是使用鍵進行索引的,因此隻需插入即可更改鍵的值我們希望更改的鍵的更新值。

示例

Java


// Java program to demonstrate 
// the working of Map interface 
  
import java.util.*; 
class GFG { 
    public static void main(String args[]) 
    { 
  
        // Initialization of a Map 
        // using Generics 
        Map<Integer, String> hm1 
            = new HashMap<Integer, String>(); 
  
        // Inserting the Elements 
        hm1.put(new Integer(1), "Geeks"); 
        hm1.put(new Integer(2), "Geeks"); 
        hm1.put(new Integer(3), "Geeks"); 
  
        System.out.println("Initial Map " + hm1); 
  
        hm1.put(new Integer(2), "For"); 
  
        System.out.println("Updated Map " + hm1); 
    } 
}
輸出
Initial Map {1=Geeks, 2=Geeks, 3=Geeks}
Updated Map {1=Geeks, 2=For, 3=Geeks}

3. 刪除元素

為了從 Map 中刪除元素,我們可以使用 remove() method 。此方法獲取鍵值,並從該映射中刪除鍵的映射(如果該鍵存在於映射中)。

示例

Java


// Java program to demonstrate 
// the working of Map interface 
  
import java.util.*; 
class GFG { 
  
    public static void main(String args[]) 
    { 
  
        // Initialization of a Map 
        // using Generics 
        Map<Integer, String> hm1 
            = new HashMap<Integer, String>(); 
  
        // Inserting the Elements 
        hm1.put(new Integer(1), "Geeks"); 
        hm1.put(new Integer(2), "For"); 
        hm1.put(new Integer(3), "Geeks"); 
        hm1.put(new Integer(4), "For"); 
  
        // Initial Map 
        System.out.println(hm1); 
  
        hm1.remove(new Integer(4)); 
  
        // Final Map 
        System.out.println(hm1); 
    } 
}
輸出
{1=Geeks, 2=For, 3=Geeks, 4=For}
{1=Geeks, 2=For, 3=Geeks}

4. 迭代Map

有多種方法可以迭代 Map。最著名的方法是使用 for-each 循環並獲取 key 。使用getValue()方法找到鍵的值。

示例

Java


// Java program to demonstrate 
// the working of Map interface 
  
import java.util.*; 
class GFG { 
    public static void main(String args[]) 
    { 
  
        // Initialization of a Map 
        // using Generics 
        Map<Integer, String> hm1 
            = new HashMap<Integer, String>(); 
  
        // Inserting the Elements 
        hm1.put(new Integer(1), "Geeks"); 
        hm1.put(new Integer(2), "For"); 
        hm1.put(new Integer(3), "Geeks"); 
  
        for (Map.Entry mapElement : hm1.entrySet()) { 
            int key = (int)mapElement.getKey(); 
  
            // Finding the value 
            String value = (String)mapElement.getValue(); 
  
            System.out.println(key + " : " + value); 
        } 
    } 
}
輸出
1 : Geeks
2 : For
3 : Geeks

5.使用Hashmap統計數字出現的次數

在此代碼中,我們使用 putIfAbsent() 和 Collections.frequency() 來計算數字的確切出現次數。在許多程序中,您需要計算特定數字或字母的出現次數。您可以使用以下方法來解決這些類型的問題

Java


// Java program to Count the Occurrence  
// of numbers using Hashmap 
import java.util.*; 
  
class HelloWorld { 
    public static void main(String[] args) 
    { 
        int a[] = { 1, 13, 4, 1, 41, 31, 31, 4, 13, 2 }; 
  
        // put all elements in arraylist 
        ArrayList<Integer> aa = new ArrayList(); 
        for (int i = 0; i < a.length; i++) { 
            aa.add(a[i]); 
        } 
  
        HashMap<Integer, Integer> h = new HashMap(); 
  
        // counting occurrence of numbers 
        for (int i = 0; i < aa.size(); i++) { 
            h.putIfAbsent(aa.get(i), Collections.frequency( 
                                         aa, aa.get(i))); 
        } 
        System.out.println(h); 
    } 
}
輸出
{1=2, 2=1, 4=2, 41=1, 13=2, 31=2}

Java Map接口常見問題解答

Q1. Java中的Map接口是什麽?

回答:

The map contains key-value pairs, where we access elements in the map using key values.

Q2。 Java中的Map接口有哪些類型?

回答:

There are 3 map interface implementations HashMap, LinkedHashMap, and TreeMap.



相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Map Interface in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。