文档章节

java HashMap插入重复Key值问题

jsonL
 jsonL
发布于 2015/12/05 23:36
字数 364
阅读 430
收藏 0

今天在用到了HashMap来添加数据,发现有重复的key添加。查看java文档终于知道了解决方法。请看下面原来的例子:

 class User {
    private String id;
    private String name;
 
    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }
}

接下来主程序调用

 HashMap hm = new HashMap();    
 User user = new User("1", "bbb");
 User user1 = new User("1", "bbb");
 hm.put(user , "a");
 hm.put(user1 , "b")

猜下HashMap中有几个元素?

答案是有两个,原因是user和user1放在了不同的内存地址里面,user和user1传进去的是引用,那么怎么样实现HashMap没有值相同的Key呢?

方法很简单:只需要重写两个函数 public boolean equals(Object obj); 和 public int hashCode()

 

 class User {
    private String id;
    private String name;
 
    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }
}
     //固定不变的值
    public int hashCode(){                 
     return this.id; 
    } 
   
    public boolean equals(Object obj) {   
       if (this == obj) {               
              return true;                  
       }         
       if (!(obj instanceof User)) {  
             return false;               
       }    
       
       User = (User) obj;  
      
       if (this.id.equals(p.id)){              
           return true ;                  
       } else {           
           return false ;                
       }       
    }
}

 然后进行测试

 HashMap hm = new HashMap();    
 User user = new User("1", "bbb");
 User user1 = new User("1", "bbb");
 hm.put(user , "a");
 hm.put(user1 , "b")

你会发现,HashMap里只有一个Key了

至于HashCode要怎么实现,我认为可以任意实现,取得不好只是会影响HashMap的效率,另外想要插入重复的Key可以使用IdentityHashMap,详见java document

 

© 著作权归作者所有

jsonL
粉丝 0
博文 8
码字总数 751
作品 0
高级程序员
私信 提问
一文读懂JDK1.7,JDK1.8,JDK1.9的hashmap,hashtable,concurrenthashmap及他们的区别

本篇为威力加强升级版本,读到最后,有惊吓 1:hashmap简介(如下,数组-链表形式) HashMap的存储结构 图中,紫色部分即代表哈希表,也称为哈希数组(默认数组大小是16,每对key-value键值对...

java进阶架构师
2018/08/14
0
0
java8: hashmap性能提升

HashMap是一个高效通用的数据结构,它在每一个Java程序中都随处可见。先来介绍些基础知识。你可能也知道,HashMap使用key的hashCode()和equals()方法来将值划分到不同的桶里。桶的数量通常要...

xinyitianii
2014/06/17
390
0
一文读懂JDK7,8,9的hashmap,hashtable,concurrenthashmap及他们的区别

内容和标题一样长哦,人家写了好久的。如无特别指明,内容对应的源码是jdk1.7(后面会和1.8对比) 1:hashmap简介(如下,数组-链表形式) HashMap的存储结构 图中,紫色部分即代表哈希表,也...

java进阶架构师
2018/10/28
0
0
一文读懂JDK7,8,JD9的hashmap,hashtable,concurrenthashmap及他们的区别

     内容和标题一样长哦,人家写了好久的。如无特别指明,内容对应的源码是jdk1.7(后面会和1.8对比)   1:hashmap简介(如下,数组-链表形式)   HashMap的存储结构      图中...

java进阶架构师
2018/11/01
0
0
【鲁班学院】面试总结:Java高级篇(上):集合的类型以及重新认识HashMap

1.你用过哪些集合类? 大公司最喜欢问的Java集合类面试题 40个Java集合面试问题和答案 java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。 java.util.Collecti...

骚年锦时
05/28
60
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Security 自定义登录认证(二)

一、前言 本篇文章将讲述Spring Security自定义登录认证校验用户名、密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Security...

郑清
20分钟前
1
0
php yield关键字以及协程的实现

php的yield是在php5.5版本就出来了,而在初级php界却很少有人提起,我就说说个人对php yield的理解 Iterator接口 在php中,除了数组,对象可以被foreach遍历之外,还有另外一种特殊对象,也就是继承...

冻结not
33分钟前
2
0
servlet请求和响应的过程

本文转载于:专业的前端网站➥servlet请求和响应的过程 1.加载 Servlet类被加载到Java虚拟机中,并且实例化。在这个过程中,web容器(例如tomcat)会调用Servlet类的公开无参构造函数,产生一...

前端老手
33分钟前
2
0
golang 1.13 errors 包来了,不用写“err 气功波”代码

引 这篇是对 errors 包 的姿势挖掘 气功波错误代码 从 http.Get()返回的错误 判断 syscall.ECONNREFUSED 错误.以前要对 go 标准库 error 结构有点熟悉,才能写出下面的代码 func CmdErr(err ...

guonaihong
37分钟前
25
0
喜玛拉雅已听书单

时间倒序排 书名 作者 状态 唐砖 孑与2 进行中 死灵之书(克苏鲁神话合集) 阿卜杜拉·阿尔哈萨德 进行中 赡养人类 刘慈欣 完结 赡养上帝 刘慈欣 完结 中国太阳 刘慈欣 完结 中国太阳 刘慈欣...

Alex_Java
38分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部