HashMap存入相同key的两种不同的存储方式
来源:互联网 发布:邮政小包业务流程优化 编辑:程序博客网 时间:2024/05/22 07:00
今天在看《编程思想》关于HashMap章节的keySet()方法的时候,突然想到一个问题,既然key的存储方式是Set不可重复的,那么如果相同的Key下存储了多个值,源码中对于这样的逻辑是怎样考虑的呢?
import java.util.HashMap;import java.util.Map;/*** @author Bingo * E-mail:riskys@163.com* @version 创建时间:2017年7月3日 上午9:57:49* 类说明*/public class HashMapTest {public static void main(String[] args) {Map<String, Dog> map = new HashMap<>();map.put("zhang", new Dog("zhangmao", 4));map.put("wang", new Dog("wanggou", 3));map.put("zhang", new Dog("zhanggou", 2));map.put("zhang", new Dog("zhangzhu", 1));map.put("wang", new Dog());for (String key : map.keySet()) {System.out.println(map.get(key));}}private static class Dog {private String name;private int age;public Dog() {this("default name", 0);}public Dog(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return name + " " + age;}}}输出结果为:
可以看到,并没有输出多个结果,或者输出一个list,表明可能是出现了覆盖,查阅API相关的说明。
表明确实像例子中证明的那样,在插入时,如果原来的key已经存在,则直接将新值覆盖到原值上面。
这样就又有了新的问题:如果我们想要实现相同key的多个value的存储,如何实现呢?
从上面的分析可知:有两个关键的方法:key的hashCode()和map的put()方法,前一个用于比较key是否相同,后一个用于插入方式的实现。
只要重写了key的hashCode()和map的put()方法,应该就可以实现对于相同key下多个value的存储。
具体做法是:由于判断key是否存在的时候是先比较key的hashCode,再比较相等或equals的,所以重写hashCode()和equals()方法即可实现添加重复元素。重写这两个方法之后就可以覆盖重复的键值对,如果需要对value进行叠加,调用put()方法之前用containsKey()方法判断是否有重复的键值,如果有,则用get()方法获取原有的value,再加上新加入的value即可。
阅读全文
0 0
- HashMap存入相同key的两种不同的存储方式
- HashMap遍历key和value的两种方式
- HashMap 的存储方式
- HashMap遍历的两种方式
- 遍历HashMap的常用两种方式
- HashMap遍历的两种方式
- HashMap遍历的两种方式
- HashMap遍历的两种方式
- HashMap遍历的两种方式
- hashmap遍历的两种方式
- HashMap遍历的两种方式
- HashMap遍历的两种方式
- HashMap的两种排序方式
- 遍历HashMap的两种方式
- HashMap遍历的两种方式
- HashMap遍历的两种方式
- HashMap遍历的两种方式
- HashMap遍历的两种方式
- 中文乱码的产生原因
- 一秒学会安卓tcp基于netty4.x心跳,断线重连,状态监听
- app数据加密
- git远程仓库回滚
- python3 网络爬虫(三)利用post请求获取网页的动态加载数据
- HashMap存入相同key的两种不同的存储方式
- 面向对象和面向过程的区别及其优缺点
- python中numpy矩阵的切片操作slicing心得
- mysql基础
- 双绞线的制作,T568A线序,T568B线序
- Java开发实战1200例(第1卷+第2卷)pdf教程+随书光盘源码
- 数据库之select的执行顺序
- java研发方向校招复习知识点汇总
- 搭建LNMP环境 nginx fastcgi 连接php