IdentityHashMap类:增加相同Key(键)内容的结果
内容 结果 Key 增加 相同
2023-09-14 08:58:42 时间
正常Map操作中,key是不能重复的。
先看使用HashMap()操作,增加相同Key内容的结果:
先看代码:
package 类集; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; class Person{ private String name ; private int age ; public Person(String name,int age){ this.name = name ; this.age = age ; } public boolean equals(Object obj){ if(this==obj){ return true ; } if(!(obj instanceof Person)){ return false ; } Person p = (Person)obj ; if(this.name.equals(p.name)&&this.age==p.age){ return true ; }else{ return false ; } } public int hashCode(){ return this.name.hashCode() * this.age ; } public String toString(){ return "姓名:" + this.name + ",年龄:" + this.age ; } }; public class test1{ public static void main(String args[]){ Map<Person,String> map = null ; // 声明Map对象 map = new HashMap<Person,String>() ; map.put(new Person("张三",30),"zhangsan_1") ; // 加入内容 map.put(new Person("张三",30),"zhangsan_2") ; // 加入相同键key的内容 map.put(new Person("李四",31),"lisi") ; // 加入内容 Set<Map.Entry<Person,String>> allSet = null ; // 准备使用Set接收全部内容 allSet = map.entrySet() ; Iterator<Map.Entry<Person,String>> iter = null ; iter = allSet.iterator() ; while(iter.hasNext()){ Map.Entry<Person,String> me = iter.next() ; System.out.println(me.getKey() + " --> " + me.getValue()) ; } } };
输出结果:
姓名:张三,年龄:30 --> zhangsan_2
姓名:李四,年龄:31 --> lisi
可见,HashMap()操作的时候,key内容是不能重复的,当新增相同key的内容时候,新增内容会替换掉原来的key的内容。
要想key内容能够重复(指的是两个对象的地址不一样,key1!=key2)。则要使用IdentityHashMap类。
替换掉HashMap后的结果:
package 类集; import java.util.HashMap; import java.util.IdentityHashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; class Person{ private String name ; private int age ; public Person(String name,int age){ this.name = name ; this.age = age ; } public boolean equals(Object obj){ if(this==obj){ return true ; } if(!(obj instanceof Person)){ return false ; } Person p = (Person)obj ; if(this.name.equals(p.name)&&this.age==p.age){ return true ; }else{ return false ; } } public int hashCode(){ return this.name.hashCode() * this.age ; } public String toString(){ return "姓名:" + this.name + ",年龄:" + this.age ; } }; public class test1{ public static void main(String args[]){ Map<Person,String> map = null ; // 声明Map对象 map = new IdentityHashMap<Person,String>() ; map.put(new Person("张三",30),"zhangsan_1") ; // 加入内容 map.put(new Person("张三",30),"zhangsan_2") ; // 加入内容 map.put(new Person("李四",31),"lisi") ; // 加入内容 Set<Map.Entry<Person,String>> allSet = null ; // 准备使用Set接收全部内容 allSet = map.entrySet() ; Iterator<Map.Entry<Person,String>> iter = null ; iter = allSet.iterator() ; while(iter.hasNext()){ Map.Entry<Person,String> me = iter.next() ; System.out.println(me.getKey() + " --> " + me.getValue()) ; } } };
输出结果:
姓名:张三,年龄:30 --> zhangsan_1 姓名:李四,年龄:31 --> lisi 姓名:张三,年龄:30 --> zhangsan_2
正常输出重复的结果!
相关文章
- 数据采集:内容、输入、结果2021.10.21
- 会声会影2023更新功能内容介绍
- Linux cat命令:在终端设备上显示文件内容
- Vue 组件插槽:父子组件间的内容分发和插槽作用域
- YouTube推出打赏功能 促进内容变现
- Linux 使用grep查找文件内容(linux文件内容查找)
- 如何在 Linux 中创建文件并添加内容(linux创建文件内容)
- Linux标准输出重定向: 让内容更精彩(linux标准输出重定向)
- 深入探索使用Redis查找宝藏(查找redis内容)
- Oracle修改记录调整表元素值(oracle修改元素内容)
- 怎样读取一个文本文件的内容?
- javascript使td内容不换行不撑开
- 利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)