HashMap为保证键的唯一性重写equals()与hashCode()方法
2018-03-11 20:44
399 查看
首先不重写 equals方法比较的是两个对象之间的内存地址是否相同,hashcode方法继承于Object,其hashcode码为默认的内存地
址。
这里我们创建一个User对象,属性有age,name;
第一:假设两个方法都未重写,创建了两个相同对象:
User user1=new User(18,"周杰伦");
User user2=new User(18,"周杰伦");
由于这两个人是相同的,按照hashmap的要求,不能有重复的key值。但是存储到hashmap时,由于hashcode和equals没有被重写,这两个对象也就不同了,所以将会被保存到hashmap中,所以错误。
第二:假设重写了equals方法,没有重写hashcode方法,在进行进行存储的过程中,尽管equals比较两个对象相同,但是hashcode方法得到的值不同,这两个对象也就不同,所以将会被保存到hashmap中,所以错误。
我们从读取中再来分析一下,当重写了equals方法,将一个对象保存到hashmap中
User user1=new User(18,"周杰伦");,
当需要获取数据时,get(user1=new User(18,"周杰伦")),由于hashcode方法没被重写,获得的对象为null。
址。
这里我们创建一个User对象,属性有age,name;
第一:假设两个方法都未重写,创建了两个相同对象:
User user1=new User(18,"周杰伦");
User user2=new User(18,"周杰伦");
由于这两个人是相同的,按照hashmap的要求,不能有重复的key值。但是存储到hashmap时,由于hashcode和equals没有被重写,这两个对象也就不同了,所以将会被保存到hashmap中,所以错误。
第二:假设重写了equals方法,没有重写hashcode方法,在进行进行存储的过程中,尽管equals比较两个对象相同,但是hashcode方法得到的值不同,这两个对象也就不同,所以将会被保存到hashmap中,所以错误。
我们从读取中再来分析一下,当重写了equals方法,将一个对象保存到hashmap中
User user1=new User(18,"周杰伦");,
当需要获取数据时,get(user1=new User(18,"周杰伦")),由于hashcode方法没被重写,获得的对象为null。
相关文章推荐
- java 重写HashCode和equals方法以及 HashMap集合 增 删 改 查
- HashMap中重写hashCode和equals方法
- HashMap中的key为什么不能为可变对象(除非重写它的hashcode方法和equals方法)
- 源码剖析HashMap--当key为Object时为什么要重写hashcode与equals方法
- HashMap和HashSet中hashCode()和equals()方法重写的问题
- 浅谈HashMap以及重写hashCode()和equals()方法
- java中hashMap使用一个对象作为key时,对key进行唯一性表达重写equals()方法
- HashMap什么时候重写hashcode和equals方法,为什么需要重写
- HashMap将对象作为key为什么需要重写equals和hashcode方法
- java 集合 HashMap 重写hashCode() equals()方法来存放自定义类对象
- 7 hashCode方法,equals方法,HashSet,HashMap关系?
- 为什么重写equals时还必须重写hashcode方法
- 为啥要重写equals()和hashcode()方法
- 9. 【对于所有对象都通用的方法】重写equals方法时一定也要重写hashCode方法
- 为什么在重写 equals方法的同时必须重写 hashcode方法
- 关于重写equals,hashcode以及compareTo方法!
- Java的重写equals但不重写hashCode方法的影响
- 为什么重写equals方法,一定要重写HashCode方法?(
- 为什么在重写equals方法时都要重写hashCode方法?
- java重写equals和hashCode方法