HashMap:常见用法总结
- 前言
- 一、常规用法总结
- 1.增加元素:put()
- 2.删除元素:remove()
- 3.获取Key对应Value:get()、getOrDefault()
- 4.遍历Map:entrySet ,keySet,Iterator
- 5.清空Map:clear
- 6.查看Map长度:size
- 总结
前言
HashMap 是Java中非常常见的一种数据结构。平台上已经有很多大佬写了非常详细的HashMap介绍。
先分享一个介绍的很完整、很详细的参考链接:HashMap详解 这篇文章基本介绍了HashMap的所有内容了,大家可以去仔细学习一下。
那写这篇文章的主要目的是啥呢?
在我看来,大多数开发者并不需要那么详细的了解内容,更多的是需要知道一些用法(在开发的时候需要快速了解如何使用),对背后的原理其实并不是那么的关心。
因此本文主要是面向实际开发的,算是大佬文章部分内容的总结和精炼,为了更快速的了解自己想知道的。
希望对大家有用吧。
一、常规用法总结
1.增加元素:put()
最常规用法:
HashMap<Integer, Integer> map = new HashMap<>();
put(1, 1);
注意:HashMap的Key值不能重复,push同样的key值,value值会被覆盖
HashMap<Integer, Integer> map = new HashMap<>();
map.put(1, 3);
System.out.println(map.get(1)); //3
map.put(1, 5);
System.out.println(map.get(1)); //5
这里有一个很隐藏的坑:有些“看似一样的”Key,可以共存在HashMap中,这样经常会导致报错!
原因在于:“看似一样的”Key,实际上并不一样,因为这些的Key的类型是不同的。
具体可以参考:HashMap插入相同key问题
还有一篇文章也很值得参考:为什么我的HashMap把同一个对象当作了不同的key?乱用lombok注解埋下的坑
大家在开发的时候一定要注意权限最小原则啊~防止在不经意间埋雷
HashMap是的key是不能重复的,如果有相同的key,最后一个key对应的value会把前一个相同的value覆盖掉。
如果键是一个对象的话, 不同的对象就是不同的key
2.删除元素:remove()
remove()用来移除元素:
Map < Integer, String > map = new HashMap < Integer, String > ();
map.put(10, "C");
map.put(20, "C++");
map.put(50, "JAVA");
map.put(40, "PHP");
map.put(30, "SFDC");
// Display HashMap
System.out.println("HashMap: " + map);
map.remove(50);
System.out.print("map.remove(50): " + map);
//输出:
//HashMap: {50=JAVA, 20=C++, 40=PHP, 10=C, 30=SFDC}
//map.remove(50): {20=C++, 40=PHP, 10=C, 30=SFDC}
可以参考:hashmap示例_Java HashMap remove()方法与示例
3.获取Key对应Value:get()、getOrDefault()
最常用的应该是 get()
HashMap<Integer, Integer> map = new HashMap<>();
map.put(1, 3);
System.out.println(map.get(1)); //3
get() 缺点在于可能返回 null,有可能导致流程后续报错:空指针,NullPointerException
因此,可以调用 getOrDefault() ,可以设置当 key=null 的默认返回值
HashMap<Integer, Integer> map = new HashMap<>();
map.put(1, 3);
System.out.println(map.get(1));// 3
System.out.println(map.get(2));// 没有这个key,返回null
System.out.println(map.getOrDefault(2,0)); //没有这个key,返回默认值0
可以参考:Map.getOrDefault()方法
4.遍历Map:entrySet ,keySet,Iterator
参考自:HashMap遍历的四种方法
(1)最常见:entrySet 获取的是关系对应,key和value都能取到
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue())
}
(2)只需要key或者只需要value:
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
//iterating over keys only
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
//iterating over values only
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
(3)推荐:使用Iterator迭代
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<Integer, Integer> entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
(4)低效,不推荐:先获取Key,再根据Key找Value
for(Integer key:map.keySet()) {
String value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
5.清空Map:clear
清除所有内容
HashMap<Integer, Integer> map = new HashMap<>
map.put(1, 3);
System.out.println(map.get(1)); //3
map.clear();
System.out.println(map); //啥都没了,为空
6.查看Map长度:size
查看Map长度
HashMap<Integer, Integer> map = new HashMap<>();
map.put(1, 3);
System.out.println(map.size());// 1
总结
本文主要介绍了几种HashMap的常见用法,比较简洁精炼,查看起来比较简单快速。
希望对大家有用!