【发布时间】:2016-06-29 14:19:25
【问题描述】:
假设我有一个名为 City 的类,它存储有关城市的一些数据:
public class City {
String [] states;
String name;
double lat, lng;
//Constructors, getters/setters, etc
}
我想保留一个没有重复的城市列表。现在通常它会很容易(使用 HashSet),但我将比较两个在技术上不同的对象(不同的内存地址)但相同的 String 和 double 值。我希望我的 HashSet 将具有相同内部值的对象视为“等效”。
我似乎无法弄清楚如何做到这一点。我是否覆盖 hashCode() 方法?还是我重写了 equals() 方法?
会像下面这样工作吗?
public int hashCode() {
return (double) name.hashCode() + lat * 100 + lng;
}
【问题讨论】:
-
如果你想使用 HashSet,你可以同时覆盖 hashCode 和 equals
-
你覆盖了这两种方法。
-
使您的字段最终确定(或至少在逻辑上最终确定)。如果它们是可变的,您最终可能会在
Set中出现重复项,因为它们在插入时是“唯一的”,但随后不是。
标签: java data-structures hash hashset