Java中key可以重复的Map集合:IdentityHashMap

范例:Map中的key不允许重复,重复就是覆盖

 

[java] view plaincopy
  1. package org.lxh.demo13.mapdemo;    
  2. import java.util.HashMap;    
  3. import java.util.Iterator;    
  4. import java.util.Map;    
  5. import java.util.Set;    
  6. class Person {                                
  7. // 定义Person类    
  8.     private String name;                     
  9. // 定义name属性    
  10.     private int age;                          
  11. // 定义age属性    
  12.     public Person(String name, int age) {     
  13. // 通过构造方法为属性赋值    
  14.         this.name = name;                     
  15. // 为name属性赋值    
  16.         this.age = age;                       
  17. // 为age属性赋值    
  18.     }    
  19.     public boolean equals(Object obj) {      
  20. // 覆写equals()方法    
  21.         if (this == obj) {                    
  22. // 判断地址是否相等    
  23.             return true;                      
  24. // 返回true表示同一对象    
  25.         }    
  26.         if (!(obj instanceof Person)) {       
  27. // 传递进来的不是本类的对象    
  28.             return false;                     
  29. // 返回false表示不是同一对象    
  30.         }    
  31.         Person p = (Person) obj;              
  32. // 进行向下转型    
  33.         if (this.name.equals(p.name) &&  
  34. this.age == p.age) {    
  35.             return true ;                     
  36. // 属性依次比较,相等返回true    
  37.         }else{    
  38.             return false ;                    
  39. // 属性内容不相等,返回false    
  40.         }    
  41.     }    
  42.     public int hashCode(){                      
  43. // 覆写hashCode()方法    
  44.         return this.name.hashCode() * this.age ;    
  45. // 计算公式    
  46.     }    
  47.     public String toString() {                      
  48. // 覆写toString()方法    
  49.         return "姓名:" + this.name + ";年龄:"   
  50. this.age;   // 返回信息    
  51.     }    
  52. }     
  53. public class IdentityHashMapDemo01 {    
  54.     public static void main(String[] args) {    
  55.         Map<Person, String> map = null;              
  56. // 声明Map对象,指定    
  57. 泛型类型    
  58.         map = new HashMap<Person, String>();           
  59. // 实例化Map对象    
  60.         map.put(new Person("张三"30), "zhangsan_1");    
  61. // 增加内容    
  62.         map.put(new Person("张三"30), "zhangsan_2");     
  63. // 增加内容,key重复    
  64.         map.put(new Person("李四"31), "lisi");       
  65. // 增加内容    
  66.         Set<Map.Entry<Person, String>> allSet = null;    
  67. // 声明一个Set集合    
  68.         allSet = map.entrySet();                    
  69. // 将Map接口实例变为    
  70. Set接口实例    
  71.         Iterator<Map.Entry<Person, String>>   
  72. iter = null;    // 声明Iterator    
  73. 对象    
  74.         iter = allSet.iterator();                
  75. // 实例化Iterator    
  76. 对象    
  77.         while (iter.hasNext()) {                 
  78. // 迭代输出    
  79.             Map.Entry<Person, String> me =   
  80. iter.next();// 每个对象都是Map.     
  81. Entry实例    
  82.             System.out.println(me.getKey()     
  83.                     + " --> " + me.getValue());    
  84. // 输出key和value    
  85.         }    
  86.     }    
  87. }   
 

程序运行结果:

[java] view plaincopy
  1. 姓名:李四;年龄:31 --> lisi    
  2. 姓名:张三;年龄:30 --> zhangsan_2   
 

从程序的运行结果中可以发现,第二个内容覆盖了第一个内容,所以此时可以使用Identity HashMap。使用此类时只要地址不相等(key1!=key2),就表示不是重复的key,可以添加到集合中。

范例:使用IdentityHashMap修改程序

[java] view plaincopy
  1. package org.lxh.demo13.mapdemo;    
  2. import java.util.IdentityHashMap;    
  3. import java.util.Iterator;    
  4. import java.util.Map;    
  5. import java.util.Set;    
  6. class Person {    
  7.     // 此类与之前定义一样,此处不再列出    
  8. }    
  9. public class IdentityHashMapDemo02 {    
  10.     public static void main(String[] args) {    
  11.         Map<Person, String> map = null;          
  12. // 声明Map对象,指定    
  13. 泛型类型    
  14.         map = new IdentityHashMap<Person, String>();   
  15. // 实例化Map对象    
  16.         map.put(new Person("张三"30), "zhangsan_1");   
  17. // 增加内容    
  18.         map.put(new Person("张三"30), "zhangsan_2");    
  19. // 增加内容,key重复    
  20.         map.put(new Person("李四"31), "lisi");      
  21. // 增加内容    
  22.         Set<Map.Entry<Person, String>> allSet =   
  23. null;   // 声明一个Set集合    
  24.         allSet = map.entrySet();                 
  25. // 将Map接口实例变为    
  26. Set接口实例    
  27.         Iterator<Map.Entry<Person, String>>   
  28. iter = null;// 声明Iterator对象    
  29.         iter = allSet.iterator();              
  30. // 实例化Iterator    
  31. 对象    
  32.         while (iter.hasNext()) {                 
  33. // 迭代输出    
  34.             Map.Entry<Person, String> me =   
  35. iter.next();// 每个对象都是Map.    
  36. Entry实例    
  37.             System.out.println(me.getKey()     
  38.                     + " --> " + me.getValue());    
  39. // 输出key和value    
  40.         }    
  41.     }    
  42. }   
 

程序运行结果:

[java] view plaincopy
  1. 姓名:张三;年龄:30 --> zhangsan_2    
  2. 姓名:张三;年龄:30 --> zhangsan_1    
  3. 姓名:李四;年龄:31 --> lisi   
 

从程序的运行结果中可以发现,现在的key允许重复,只要两个对象的地址不相等即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客网笔记之数组(一)

最近开始在“牛客网”上做题&#xff0c;希望通过日积月累&#xff0c;每天记录一点小知识&#xff0c;每天前进一小步。 今天练习的题目关于数组。 1. 数组存储&#xff1a;链式存储、顺序存储 线性表逻辑上是线性的&#xff0c;存储上可以是顺序的&#xff0c;可以是链式的…

社交网络节点理论

1.顿巴数 每个人的朋友圈子对多能达到150个人。&#xff08;密友3-5人&#xff0c;好友30-50人&#xff0c;其他100-150人&#xff09;纵使高科技带来的人际圈越来越大&#xff0c;但是人脑的容量是有限的&#xff0c;你也不可能和这么多人维持一定的人际关系&#xff08;没有人…

疯狂涨知识!Java多态实现原理技术总监都拍手叫好

##前言 多态是Java语言重要的特性之一&#xff0c;它允许基类的指针或引用指向派生类的对象&#xff0c;而在具体访问时实现方法的动态绑定。Java对于方法调用动态绑定的实现主要依赖于方法表&#xff0c;但通过引用调用&#xff08;invokevitual&#xff09;和接口引用调用&am…

国内互联网公司算法机器学习岗(阿里星)面试总结

从2015年8月到2015年10月&#xff0c;花了3个月时间找工作&#xff0c;先后通过内推参加了美团、阿里蚂蚁金服、京东、腾讯、今日头条、Growing IO、微软这7个公司的面试&#xff0c;同时参加了网易游戏、LinkedI In中国这2个公司的笔试&#xff0c;拿到比较优质的offer是京东S…

疯狂涨知识!「高并发秒杀」微信抢红包实战案例帮你突破瓶颈

推荐阅读&#xff1a; 阿里二面凉经&#xff1a;设计模式缓存Spring虚拟机MySQL中间件并发等难题&#xff0c;全部迎刃而解阿里巴巴字节跳动那些大厂必问的HTTP该怎么学&#xff1f;我建议你看看这篇文章&#xff01;蚂蚁、字节、PDD社招面经Java岗&#xff08;分布式线程安全…

2016面试——腾讯、蚂蚁金服、蘑菇街

腾讯TST技术面&#xff1a; 先罗列一下问题吧: 编程语言编译的过程 同样的逻辑,golang的二进制代码比C语言的二进制代码长很多.试分析原因 项目 ,三个项目都有聊.因为现场面,可以用纸写,所以描述的更清楚些 N * N的方格纸,里面有多少个正方形 两个数组求交集 什么样的…

Android开发;Activity-Hook你了解多少?一起来debug

享学课堂特邀作者&#xff1a;周周 转载请声明出处&#xff01; 前言 手把手讲解系列文章&#xff0c;是我写给各位看官&#xff0c;也是写给我自己的。文章可能过分详细&#xff0c;但是这是为了帮助到尽量多的人&#xff0c;毕竟工作5,6年&#xff0c;不能老吸血&#xff0c;…

牛客网笔记之JAVA运算符

计算机的最基本用途之一就是执行数学运算&#xff0c;作为一门计算机语言&#xff0c;Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组&#xff1a; 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运算符 逻辑运算符结果 ~a是按位非&#…

Android架构师谈:View-Pager-性能优化之-无限循环

作者&#xff1a;享学课堂Alvin老师 转载请声明出处&#xff01; ViewPager实现无限滑动 **方案一&#xff1a;**将viewpager上限设置成一个很大的数&#xff0c;第一个页面设置到中间。然后滑动的时候&#xff0c;用当前的序号与viewpager页面数取余得到目标页面的序号&#…

你知道如何用面向对象思想写好并发编程吗?

在工作中&#xff0c;我发现很多人在设计之初都是直接按照单线程的思路来写程序的&#xff0c;而忽略了本应该重视的并发问题&#xff1b;等上线后的某天&#xff0c;突然发现诡异的 Bug&#xff0c;再历经千辛万苦终于定位到问题所在&#xff0c;却发现对于如何解决已经没有了…

你知道怎么在生产环境下部署tomcat吗?

享学课堂特邀作者&#xff1a;老顾 转载请声明出处&#xff01; 一、前言 小伙伴们在网上看到的很多文章&#xff0c;都是对tomcat的一些介绍&#xff0c;什么配置啊&#xff0c;怎么启动。其实在生产环境中怎么部署&#xff0c;和网上介绍的有很大区别。这篇文章老顾就带着大…

浅谈HashMap

Java集合类的整体架构 比较重要的集合类图如下&#xff1a; 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是&#xff08;用二叉树排序&#xff09; Map AbstractMap 否 使用 key-value 来映射和存储数据&#xff0c; Key 必须惟…

matlab实现一元线性回归和多元线性回归

在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。 在实际经济问题中,一个变量往往受到多个变量的影响。例如,家…

互联网寒冬!“996”为什么还没实行?我还等着早点下班呢!

“喊了十多个月的‘996’&#xff0c;说要实行‘996’&#xff0c;上班上到现在&#xff0c;影子都没看到&#xff0c;我还能早点下班吗&#xff1f;” 我一个在广州上班的朋友小李&#xff0c;在我去广州出差期间&#xff0c;与他聊天的时候发出了这样的牢骚&#xff0c;我刚…

matlab求解常微分方程组/传染病模型并绘制SIR曲线

看了很多关于传染病模型的matlab程序,大都是绘制出两条曲线(I、S)的,本文最大的不同是绘出SIR三条曲线。 先给出SIR微分方程组 函数文件: run的程序:

互联网寒冬!技术站最全MySQL数据库实战规范

享学课堂特邀作者&#xff1a;老顾 转载请声明出处&#xff01; 前言 我们小伙伴们经常使用到mysql数据库&#xff0c;一般就这么一用&#xff0c;很少会考虑mysql里面的细节问题&#xff0c;如sql语句的规范&#xff0c;或索引有没有起到相应的效果&#xff0c;今天老顾就给大…

SQL求一个表中非重复数据及其出现的次数

mysql中&#xff0c;我们可以用distinct求不重复的数据有多少&#xff0c;也可以用group by。 这里有个例子&#xff0c;如下表sheet1&#xff0c;共有5411条数据 查询语句 共有3446条不重复数据&#xff0c;每条不重复数据出现的次数在第二列显示&#xff1a;

什么是微服务扩展性和高可用-可扩展性、高可用性和性能

欢迎关注专栏&#xff1a;Java架构技术进阶。里面有大量batj面试题集锦&#xff0c;还有各种技术分享&#xff0c;如有好文章也欢迎投稿哦。 Overview 可扩展性、高可用性和性能 术语可扩展性、高可用性、性能和关键任务对于不同的组织或组织内的不同部门来说可能意味着不同的…

SQL实现当前行等于前面两行数据之和

sql实现类似斐波那契数列的功能&#xff0c;即当前数据等于前面两个数据之和&#xff0c;详看本文例子 原表&#xff1a; sql语句&#xff08;此处要熟悉JION ON的用法&#xff09; 结果

【大牛系列教学】靠着这份面试题跟答案

开篇闲扯 打工人&#xff0c;打工魂&#xff0c;我们生而人上人。当“资本主义”逐渐禁锢我们人&#xff08;大&#xff09;上&#xff08;韭&#xff09;人&#xff08;菜&#xff09;肉体的时候&#xff0c;那一刻我才明白那个日不落帝国资本主义收割机瑞民族之光幸瑞幸咖啡…