博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么重写HashCode()和equal()
阅读量:3737 次
发布时间:2019-05-22

本文共 1419 字,大约阅读时间需要 4 分钟。

先揭晓答案:重写这俩个方法是为了在使用HashMap 传入自定义Key时,HashMap还能根据需求正常使用。

现在有这样的需求:根据Key的属性返回value。

不重写会怎样,来看代码

class Key{	int i;	Key(int i){		this.i=i;	}}public class DefineKey {	public static void main(String[] args) {		// TODO Auto-generated method stub		Key key1=new Key(1);		Key key2=new Key(1);		HashMap
map=new HashMap<>(); map.put(key1, 1); System.out.println(map.get(key2)); }}//执行结果 为 null

那么只重写HashCode()呢?

import java.util.HashMap;class Key{	Integer i;	Key(int i){		this.i=i;	}	@Override	public int hashCode() {		// TODO Auto-generated method stub		return i.hashCode();	}}public class DefineKey {	public static void main(String[] args) {		// TODO Auto-generated method stub		Key key1=new Key(1);		Key key2=new Key(1);		HashMap
map=new HashMap<>(); map.put(key1, 1); System.out.println(map.get(key2)); }}// 还是null, 虽然 get(key2) 找到了 key1所在桶 但父类的equal方法对于俩个对象还是不等的

重写俩个方法呢??

class Key{	Integer i;	Key(int i){		this.i=i;	}	@Override	public int hashCode() {		// TODO Auto-generated method stub		return i.hashCode();	}	@Override	public boolean equals(Object obj) {		// TODO Auto-generated method stub		Key key=(Key)obj;		return this.i==key.i;	}}public class DefineKey {	public static void main(String[] args) {		// TODO Auto-generated method stub		Key key1=new Key(1);		Key key2=new Key(1);		HashMap
map=new HashMap<>(); map.put(key1, 1); System.out.println(map.get(key2)); }}

这样的话 就返回 1 了

转载地址:http://qotin.baihongyu.com/

你可能感兴趣的文章
? 精美图文带你掌握 JVM 内存布局
查看>>
谈谈go.sum
查看>>
tls 1.2 example
查看>>
GitHub 计划登陆中国,将产生哪些影响与意义?
查看>>
2019 我是怎样熬过来的?
查看>>
【C++学习计划】深入浅出——变量作用域(Day3)
查看>>
策略模式
查看>>
Spring Boot 实战 入门
查看>>
关于web系统整体优化提速总结
查看>>
稳定性三十六计-幂等设计
查看>>
分布式文件系统 - fastDFS
查看>>
BUAA OO 2019 第一单元作业总结
查看>>
格网编码查询方案在项目运用上的进一步探索
查看>>
Matlab适配器模式
查看>>
BUAA-OO-2019 第三单元总结
查看>>
Matlab策略模式
查看>>
架构整洁之道
查看>>
支付渠道路由系统进化史
查看>>
行为型模式:解释器模式
查看>>
深入理解设计模式(22):享元模式
查看>>