当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。