HashMap:常见用法总结


前言

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

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HashMap是Java中常用的数据结构之一,它提供了一系列常用的方法来操作和管理键值对。以下是HashMap的几个常用方法: 1. put(key, value): 向HashMap中添加键值对。使用put方法可以将指定的键和值添加到HashMap中。例如,`hashtable.put(1, 5);`将键1和值5添加到HashMap中。\[1\] 2. get(key): 获取指定键对应的值。使用get方法可以根据指定的键获取对应的值。例如,`System.out.println(Sites.get(3));`将返回键为3的值"Taobao"。\[2\] 3. remove(key): 移除指定键对应的键值对。使用remove方法可以根据指定的键移除对应的键值对。例如,`hashtable.remove(4);`将移除键为4的键值对。\[1\] 4. clear(): 清空HashMap中的所有键值对。使用clear方法可以清空HashMap中的所有键值对。例如,`hashtable.clear();`将清空HashMap中的所有键值对。\[1\] 5. size(): 获取HashMap中键值对的数量。使用size方法可以获取HashMap中键值对的数量。例如,`System.out.println(Sites.size());`将返回HashMap中键值对的数量4。\[3\] 这些是HashMap的一些常用方法,通过使用它们可以方便地对HashMap进行操作和管理。 #### 引用[.reference_title] - *1* [HashMap常用方法(简版)](https://blog.csdn.net/m0_51524792/article/details/122738073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [HashMap 常用方法总结](https://blog.csdn.net/weixin_44760073/article/details/119783822)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值