gpt4 book ai didi

java - 什么时候包含什么?

转载 作者:行者123 更新时间:2023-12-01 19:04:03 25 4
gpt4 key购买 nike

我创建了一个类Person (正如书上所说)保存从键盘输入的人的姓名,然后还有另一个类 PhoneNumber它将国家代码、区号和人员号码封装为字符串。
Person 旨在用作 Hashmap 中的键。
BookEntry封装 PersonPhoneNumber 。很多BookEntry对象组成一个代表电话簿的 HashMap。

Person实现Comparable<Person>所以它包含 CompareTo(Person)方法。后来本书添加了equals(Object anotherPerson)方法。
我的问题是,不是 CompareTo方法足以比较两个键吗?还是 HashMap<> 的内部机制要求我包含 equals()比较两个键的方法?
compareTo()

public int compareTo(Person person) {
int result = lastName.compareTo(person.lastName);
return result==0? firstName.compareTo(person.firstName):result;
}

等于()

public boolean equals(Object anotherPerson){
return compareTo((Person)person)==0;
}

最佳答案

某些数据结构将使用 compareTo(例如 TreeMap),有些数据结构将使用 equals(例如 HashMap)。

更重要的是,强烈建议 compareToequals 保持一致,如 Comparator javadoc 中所述。 :

It is strongly recommended, but not strictly required that (x.compareTo(y)==0) == (x.equals(y)). Generally speaking, any class that implements the Comparable interface and violates this condition should clearly indicate this fact. The recommended language is "Note: this class has a natural ordering that is inconsistent with equals."

另一个提示,可在 TreeMap javadoc 中找到(强调我的):

Note that the ordering maintained by a tree map, like any sorted map, and whether or not an explicit comparator is provided, must be consistent with equals if this sorted map is to correctly implement the Map interface.

最后,如果您覆盖 equals,您还应该覆盖 hashcode 以防止在使用基于哈希的结构时出现意外行为。

关于java - 什么时候包含什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10912914/

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