Java中HashMap的常见用法详解

 更新时间:2023年09月08日 08:52:56   作者:强钦钦  
这篇文章主要介绍了Java中HashMap的常见用法详解,HashMap是Java中的一个常用子类,它是java.util.HashMap<k,v>集合,实现了Map<k,v>接口, HashMap可以存储键值对,通过键来快速访问值,在HashMap中,键是唯一的,而值可以重复,需要的朋友可以参考下

1、常用方法示例

Map<String,Integer> map=new HashMap<>();//Map父类
		map.put("zhangsan", 10);
		map.put("lisa", 20);
		map.put("wangwu", 50);
		System.out.println(map.get("lisi"));
		System.out.println(map.remove("lisi"));
		System.out.println(map.size());
		System.out.println(map.isEmpty());
		System.out.println(map.containsKey("tulun"));
		System.out.println(map.containsValue(50));
		//返回Map中所包含的键值对(<String,Integer>)所组成的Set集合,每个集合元素都是Map.Entry()对象,其中Entry是Map的内部类
		Set<Map.Entry<String,Integer>> entries=map.entrySet();
		//Set属于Collection,而Collection含有Iterator方法
		Iterator<Map.Entry<String,Integer>> iterator=entries.iterator();
		while(iterator.hasNext())
		{
			Map.Entry<String,Integer> next=iterator.next();
			System.out.println(next.getKey()+"::"+next.getValue());
		}

2、3种遍历方式

Map集合没有迭代器(iterator()),遍历集合中的元素可以用以下三种方法:

keySet()

  • 使用Map集合中的keySet()方法,把Map集合 所有的key取出来 存储到一个Set集合
  • 遍历set集合,获取Map中的每一个key
  • 通过Map集合中的方法get(key),通过key找到value

entrySet()

  • 使用Map集合中的entrySet()方法,把Map集合中 多个Entry对象取出来 存储到一个Set集合
  • 遍历set集合,获取每一个Entry对象
  • 使用**Entry对象中的getKey()和getValue()**方法获取键和值

values()

        Map<String, String> map = new HashMap<>();
        map.put("张三", "123456");
        map.put("李四", "456321");
        map.put("王五", "741852");
        map.put("赵六", "963321");
        //遍历方式1: 将map中的key的部分, 单独取出, 成为set, 遍历这个set
        Set<String> set = map.keySet();
        //使用迭代器Iterator遍历Set集合
        Iterator<String> it = set.iterator();
        while (it.hasNext()) {
            String key = it.next();
            String value = map.get(key);
            System.out.println(key + "=" + value);
        }
//        //使用forEach();遍历Set集合
//        for (String key : set) {
//            String value = map.get(key);
//            System.out.println(key + "=" + value);
//        }
//        System.out.println();
        //遍历方式2: entrySet 键值对封装成一个整体-Entry, Set<Entry>
        Set< Map.Entry<String, String> > set1 = map.entrySet(); // HashMap源码1005行
        for (Map.Entry<String, String> en : set1) {
            String key = en.getKey();
            String value = en.getValue();
            System.out.println(key + "=" + value);
        }
        System.out.println();
        // 遍历方式3: 所有的值存储到一个Collection集合中返回
        // 弊端: 就只能遍历值, 不能遍历键, 因为map不能反向映射
        Collection<String> values = map.values();
        for (String value : values) {
            System.out.println(value);
        }

3、定义的时候初始化

 private static Map<Character, Integer> map = new HashMap<Character, Integer>(){{
        put('0', 0);
        put('1', 1);
        put('2', 2);
        put('3', 3);
        put('4', 4);
        put('5', 5);
        put('6', 6);
        put('7', 7);
        put('8', 8);
        put('9', 9);
        put('A', 10);
        put('B', 11);
        put('C', 12);
        put('D', 13);
        put('E', 14);
        put('F', 15);
    }};

4、getOrDefault(Object key, V defaultValue)

当Map集合中有这个key时,就使用这个key值;   

如果没有,就使用默认值defaultValue。

代码示例如下:

HashMap<String, String> map1 = new HashMap<>();
		map1.put("name", "cookie");
		map1.put("age", "18");
		map1.put("sex", "女");
		String name = map1.getOrDefault("name", "random");
		System.out.println(name);// cookie,map中存在name,获得name对应的value
		String score = map1.getOrDefault("score", "80");
		System.out.println(score);// 80,map中不存在score,使用默认值80

5、putIfAbsent(K key, V value)

先判断指定的键(key)是否存在。不存在 则将 键/值对 插入到 HashMap 中。

public static void main(String[] args) {
      // putIfAbsent() 方法会先判断指定的键(key)是否存在。若不存在  则将键/值对插入到 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); //sites HashMap: {1=Google, 2=Runoob, 3=Taobao}
		// HashMap 不存在该key
		sites.putIfAbsent(4, "Weibo");
		// HashMap 中  存在  Key,所以  不会执行插入操作
		sites.putIfAbsent(2, "Wiki");
		System.out.println("Updated Languages: " + sites);//Updated Languages: {1=Google, 2=Runoob, 3=Taobao, 4=Weibo}
}

到此这篇关于Java中HashMap的常见用法详解的文章就介绍到这了,更多相关HashMap用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 快速解决idea打开某个项目卡住的问题

    快速解决idea打开某个项目卡住的问题

    这篇文章主要介绍了解决idea打开某个项目卡住的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • SpringCloud之Feign示例详解

    SpringCloud之Feign示例详解

    本篇文章主要介绍了SpringCloud之Feign示例详解,详细的介绍了Feign简介和使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 在springboot中如何使用线程池

    在springboot中如何使用线程池

    在SpringBoot中,可以通过定义ThreadPoolTaskExecutor的Bean并使用@Autowired注入来使用线程池,具体步骤包括创建ThreadPoolTaskExecutor的Bean配置,本文给大家介绍springboot使用线程池的例子,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • java判断中文字符串长度的简单实例

    java判断中文字符串长度的简单实例

    下面小编就为大家带来一篇java判断中文字符串长度的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Java中的Semaphore信号量简析

    Java中的Semaphore信号量简析

    这篇文章主要介绍了Java中的Semaphore信号量简析,Semaphore:信号量,用来限制能同时访问共享资源的线程上限,使用Semaphore实现简单连接池,对比享元模式下的实现(用wait和notify),性能和可读性要更好,需要的朋友可以参考下
    2023-12-12
  • Java返回可变引用对象问题整理

    Java返回可变引用对象问题整理

    在本篇文章里小编给大家分享的是关于Java返回可变引用对象问题整理内容,需要的朋友们可以学习下。
    2020-04-04
  • Java异常处理的12条军规总结

    Java异常处理的12条军规总结

    这篇文章主要给大家介绍了关于Java异常处理的12条军规,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Mybatis中使用万能的Map传参实现

    Mybatis中使用万能的Map传参实现

    在编程中,有可能遇到我们的实体类或者数据库中表的字段或参数过多的情况,那这时候用Map传参是比较理想的选择,本文就详细的介绍一下如何使用,感兴趣的可以了解下
    2021-07-07
  • Springboot事件监听与@Async注解详解

    Springboot事件监听与@Async注解详解

    这篇文章主要介绍了Springboot事件监听与@Async注解详解,在开发中经常可以利用Spring事件监听来实现观察者模式,进行一些非事务性的操作,如记录日志之类的,需要的朋友可以参考下
    2024-01-01
  • SpringBoot FailureAnalyzer实例使用教程

    SpringBoot FailureAnalyzer实例使用教程

    FailureAnalyzer是一种在启动时拦截exception并将其转换为human-readable消息的好方法,包含在故障分析中。SpringBoot为application context相关的exceptions,JSR-303验证等提供了这样的分析器,实际上很容易创建自己的
    2022-12-12

最新评论