重写map中equals方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重写map中equals方法
介绍
在Java中,java.util.Map是一个非常重要的接口,用于表示键值对的集合。Map
接口的实现类可以是HashMap、TreeMap等。在使用Map时,我们可能需要对其
key进行比较判断是否相等,此时就需要用到equals方法。
equals方法是Object类中的一个方法,用于判断两个对象是否相等。在Map中,equals方法的作用是判断两个key是否相等。因为Map中的key是唯一的,所以
判断两个key是否相等非常重要。
在默认情况下,Map中的equals方法是通过比较key的内存地址来判断是否相等的。但是在很多情况下,我们可能需要根据key的特定属性来判断是否相等。这就需要我们重写Map中的equals方法,来满足我们的需求。
为什么需要重写equals方法
在默认情况下,Map中的equals方法是通过比较key的内存地址来判断是否相等的。这样的比较方式在很多情况下是不满足我们的需求的。
假设我们有一个Person类,该类有name和age两个属性。我们用Person作为
Map的key,如果我们希望判断两个Person对象是否相等的方式是根据name的相
等来判断,那么就需要重写Person类中的equals方法。
如果我们不重写equals方法,那么在使用Person作为Map的key时,两个name
相同但age不同的Person对象会被认为是相等的。这显然是不符合我们的需求的。因此,为了满足特定的需求,我们需要重写Map中的equals方法。
如何重写equals方法
重写equals方法的步骤如下:
1.在Person类中重写equals方法。
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return Objects.equals(name, );
}
在该方法中,我们首先判断两个对象是否是同一个对象,如果是则直接返回true。接着判断传入的对象是否为空或者是否与当前对象的类不一致,如果是则返回false。然后将传入的对象强制转换为Person类,并比较两个Person对象的name
属性是否相等,如果相等则返回true,否则返回false。
2.使用重写的equals方法在使用Person类作为Map的key时,就可以使用
重写后的equals方法来判断两个Person对象是否相等了。
Map
Person person1 = new Person("Tom", 20);
Person person2 = new Person("Tom", 25);
map.put(person1, 1);
System.out.println(map.get(person2)); // 输出1
在上述代码中,我们将person1作为Map的key存入,并且设置value为1。然后
我们使用person2作为key来获取对应的value,由于person2的name属性与person1相同,所以可以正常获取到value为1。
equals方法的约定
在Java中,equals方法有一些约定,这些约定需要满足才能正确使用equals方法。
1.自反性:对于任意非空引用x,x.equals(x)应该返回true。
2.对称性:对于任意非空引用x和y,如果x.equals(y)返回true,则
y.equals(x)也应该返回true。
3.传递性:对于任意非空引用x、y和z,如果x.equals(y)返回true且
y.equals(z)返回true,则x.equals(z)也应该返回true。
4.一致性:对于任意非空引用x和y,如果x.equals(y)返回true或者false,
多次调用x.equals(y)应该返回相同的结果。
5.对于任意非空引用x,x.equals(null)返回false。
在重写equals方法时,需要满足这些约定,以保证equals方法的正确使用。
总结
重写Map中的equals方法是为了满足特定需求,比如根据对象的特定属性来判断
两个对象是否相等。
重写equals方法的步骤包括在类中重写equals方法和使用重写后的equals方法。
在重写equals方法时,需要满足equals方法的约定,以保证equals方法的正确
使用。
重写equals方法可以提高代码的灵活性和精确性,使得Map的使用更加符合我们
的需求。
通过合理地重写equals方法,我们可以在Map中根据特定属性来判断两个对象是
否相等,从而更好地满足我们的业务需求。