什么时候使用HashMap要重写hashCode()和equals()?

当使用自定义类作为HashMap的key时,需要重写hashCode()和equals()方法。只有当equals()返回true时,hashCode才会被调用来确定元素位置。在给定的实例中,即使equals()返回false,HashCode也不会被检查。
摘要由CSDN通过智能技术生成

先上结论:如果需要将自定义类对象作为HashMap的key,那么自定义类中需要重写hashCode()和equals()

Object.class
public boolean equals(Object obj) {
    return (this == obj);
}
public native int hashCode();//非Java语言的实现,直接来源于JVM底层

HashMap.class
在进行Put操作的时候会匹配key.hashCode的hash是否一样,如果不一样的就直
接进行插入操作了,如果hash一样的情况下,就会进行equal的比较,去比较两个
对象是否一样,看Map中是否存在该对象了.

实例:
当你新建两个Integer对象
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
这两个对象是不等的:i1==i2结果显然为false,但是这两个对象的引用是一样
的,也就是引用的1来源于同一个地址。为什么要说这个?看下面代码:
HashMap<Integer,Integer> iMap = new HashMap<>();
iMap.put(i1,1);
iMap.put(i2,2);
System.out.println(iMap.get(i1));
System.out.println(iMap.get(i2));
清楚结果了?输出的结果为两个2,常识上的理解,这个结果是正常,非常赞同。
看到下面的自定义class对象:
public static void main(String[] args) {
	Student stu1 = new ArrayListDemo().new Student("Mrlj", "B");
	Student stu2 = new ArrayListDemo().new Student("Mrlj", "B"
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值