重写map中equals方法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 map = new HashMap<>();

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中根据特定属性来判断两个对象是

否相等,从而更好地满足我们的业务需求。

相关文档
最新文档