Java :Map.Entry与entrySet应用

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java :Map.Entry与entrySet应用相关的知识,希望对你有一定的参考价值。

文章目录

entrySet

entrySet() 方法的语法为:

hashmap.entrySet()

:hashmap 是 HashMap 类的一个对象。

返回值

返回此映射中包含的映射的 Set 视图。

注意Set 视图意思是 HashMap 中所有的键值对都被看作是一个 set 集合
例如:[1=Google, 2=Runoob, 3=Taobao],这个集合有多个键值对组成,每个键值对可以看做是一个set集合元素,合起来就是一个Set 视图。

以下实例演示了 entrySet() 方法的使用:

entrySet实例

import java.util.HashMap;

class Main 
    public static void main(String[] args) 
        // 创建一个 HashMap
        HashMap<Integer, String> sites = new HashMap<>();

        // 往 HashMap 添加一些元素
        sites.put(1, "Google");
        sites.put(2, "Runoob");
        sites.put(3, "Taobao");
        System.out.println("sites HashMap: " + sites);

        // 返回映射关系中 set view
        System.out.println("Set View: " + sites.entrySet());
    

执行以上程序输出结果为:

sites HashMap: 1=Google, 2=Runoob, 3=Taobao
Set View: [1=Google, 2=Runoob, 3=Taobao]

entrySet() 方法可以与 for-each 循环一起使用,可以用来遍历迭代 HashMap 中每一个映射项。

HashMap遍历

import java.util.HashMap;
import java.util.Map.Entry;

class Main 
    public static void main(String[] args) 

        // 创建一个HashMap
        HashMap<String, Integer> numbers = new HashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("HashMap: " + numbers);

        // 访问 HashMap 中的每一个映射项
        System.out.print("Entries: ");

        // entrySet()返回了 HashMap 中所有映射项的一个 set 集合视图
        // for-each loop 在该视图中访问了每一映射项*
        for (Map.Entry<String, Integer> entry : numbers.entrySet()) 
            System.out.print(entry);
            System.out.print(", ");
        
    

执行以上程序输出结果为:

HashMap: One=1, Two=2, Three=3
Entries: One=1, Two=2, Three=3, 

Map.Entry

定义:Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键/值对。通过这个集合的迭代器,获得每一个条目(唯一获取方式)的键或值并对值进行更改。

Map.Entry方法

Map.Entry中的常用方法如下所示:

方法说明
Object getKey()返回条目的关键字
Object getValue()返回条目的值
Object setValue(Object value)将相关映像中的值改为value,并且返回旧值

Map.Entry的作用

Map.Entry是为了更方便的输出map键值对。一般情况下,要输出Map中的key 和 value 是先得到key的集合keySet(),然后再迭代(循环)由每个key得到每个value。values()方法是获取集合中的所有值,不包含键,没有对应关系。而Entry可以一次性获得这两个值。

常用的遍历Map的方法整理

public static void main(String[] args) 
    Map<String, String> map = new HashMap<String, String>();
    map.put("1", "value1");
    map.put("2", "value2");
    map.put("3", "value3");
    //第一种:普遍使用,由于二次取值,效率会比第二种和第三种慢
    System.out.println("通过Map.keySet遍历key和value:");
    for (String key : map.keySet()) 
        System.out.println("key= "+ key + " and value= " + map.get(key));
    
    //第二种
    System.out.println("通过Map.entrySet使用iterator遍历key和value:");
    Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
    while (it.hasNext()) 
        Map.Entry<String, String> entry = it.next();
        System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    
    //第三种:无法在for循环时实现remove等操作
    System.out.println("通过Map.entrySet遍历key和value");
    for (Map.Entry<String, String> entry : map.entrySet()) 
        System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    
    //第四种:只能获取values,不能获取key
    System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
    for (String v : map.values()) 
        System.out.println("value= " + v);
    

运行效果如下:

Map.entrySet迭代器会生成EntryIterator,其返回的实例是一个包含key/value键值对的对象。而keySet中迭代器返回的只是key对象,还需要到map中二次取值。故entrySet要比keySet快很多。

总结

应用:Map.Entry与entrySet通常结合使用进行HashMap的遍历。

Map.Entry中的常用方法如下所示:

方法说明
Object getKey()返回条目的关键字
Object getValue()返回条目的值
Object setValue(Object value)将相关映像中的值改为value,并且返回旧值

遍历HashMap代码:

for (Map.Entry<String, String> entry : map.entrySet()) 
		String key = entry.getKey();
		String value = entry.getValue();
        System.out.println("key= " + key + " and value= " + value);

以上是关于Java :Map.Entry与entrySet应用的主要内容,如果未能解决你的问题,请参考以下文章

Java中Map的 entrySet() 详解以及用法(四种遍历map的方式)

使用HashMap须要注意的事儿:不要暴露Map.entry给外部不可信代码Map.entrySet()

java Map及Map.Entry详解

Map.Entry说明

Map.Entry使用详解

另一种遍历Map的方式: Map.Entry 和 Map.entrySet()