gpt4 book ai didi

java - 树状图忽略了我对 equals 函数的覆盖

转载 作者:行者123 更新时间:2023-11-29 06:42:36 25 4
gpt4 key购买 nike

我有一个 TreeMap,其中 RobotKey 是一个由字符串字段域和长字段时间戳组成的类。 RobotKey 实现类似如下:

@Override
public boolean equals(Object obj) {
if (this.domain.equals(((RobotKey) obj).getDomain()))
return true;
return false;
}

TreeMap 根据以下 compareTo 函数排序:

@Override
public int compareTo(RobotKey arg0) {
if (this.lastAccessed < arg0.lastAccessed)
return -1;
else if (this.domain.equals(arg0.getDomain()))
return 0;
else
return 1;
}

所以基本上, map 是通过域名访问的,并根据时间戳进行排序。

我做了 treemap.get(RobotKey e),其中 e 与 TreeMap 中的现有条目具有相同的域名,但时间戳不同。这应该返回正确的 RobotValue,因为 Map 操作是用 equals 完成的。但它反而返回 null 表示找不到 RobotKey。知道为什么会这样吗?我做错了什么,我该如何解决?谢谢!

最佳答案

问题是关于 equals 和 compareTo 方法的不一致。compareTo 必须返回 0 当且仅当 equals 返回 true,据我记得 TreeMap(或 TreeSet)不调用 equals 方法,它只是使用 compareTo 及其结果来指示重复键。

关于java - 树状图忽略了我对 equals 函数的覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9743086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com