我正在测试TreeMap
的行为并了解排序过程。但是,我仍然处于混乱的思想中,为了进行检索,自定义键类需要重写hashCode方法。话虽如此,我已经搜索了足够多的谷歌,但找不到任何合理的答案。
以下是我处理过的示例。
class Dog implements Comparable<Dog> {
String color;
int size;
Dog(String c, int s) {
color = c;
size = s;
}
int hc;
@Override
public int hashCode() {
hc = super.hashCode();
return hc;
}
@Override
public int compareTo(Dog o) {
return this.color.compareTo(o.color);
}
}
用于测试TreeMap的测试代码。
public class TestHashMap {
public static void main(String[] args) {
Dog d1 = new Dog("a", 1);
Dog d2 = new Dog("b", 2);
Dog d3 = new Dog("c", 3);
Dog d4 = new Dog("d", 4);
Dog d5 = new Dog("e", 5);
Dog d = new Dog("c", 3);
TreeMap<Dog, Integer> hm = new TreeMap<>();
hm.put(d1, 10);
hm.put(d2, 15);
hm.put(d3, 5);
hm.put(d4, 20);
hm.put(d5, 25);
System.out.println("value is :" + hm.get(d));
}
}
不管我是否实现hashCode方法,都不能正确检索该值,但是,在调试时,总是调用hashcode方法,所以如果真的必须执行hashCode实现,我会感到困惑。
任何人都可以帮助您理解从TreeMap检索的正确行为。
请不要从TreeMap复制粘贴Java文档。
最佳答案
hashCode()
被称为默认toString()
实现的一部分。由于您尚未实现自己的toString()
,因此我怀疑您在代码中的某个位置打印了Dog
从而导致了方法调用。