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的常见用法,比较简洁精炼,查看起来比较简单快速。
希望对大家有用!