获取内容相似但不引用的Hashtable Key

我有一些看起来像这样的 java 代码:它使用 aHashtable来存储对应于一个三维点的数据。


Hashtable<ThreeDimensionalPoint,data> table = new Hashtable<ThreeDimensionalPoint,data>();

table.put(new ThreeDimensionlPoint(1,1,1),new data());

table.get(new ThreeDimensionalPoint(1,1,1);

我想要做的是data从哈希表中退出,只知道ThreeDimensionalPoint对象的坐标。当然,第三行将不起作用,因为.get通过引用匹配键,而不是对象的内容。


有人有解决方案吗?ThreeDimensionalPoint该类有三个指定坐标的整数。


互换的青春
浏览 134回答 3
3回答

摇曳的蔷薇

您需要覆盖类的equals和hashCode方法ThreeDimensionalPoint。假设你的属性ThreeDimensionalPoint是维度 (x, y, z),下面是一个从 IntelliJ Idea 生成的例子。&nbsp;@Overridepublic boolean equals(Object o) {&nbsp; &nbsp; if (this == o) return true;&nbsp; &nbsp; if (o == null || getClass() != o.getClass()) return false;&nbsp; &nbsp; Coordinate that = (Coordinate) o;&nbsp; &nbsp; if (x != that.x) return false;&nbsp; &nbsp; if (y != that.y) return false;&nbsp; &nbsp; return z == that.z;}@Overridepublic int hashCode() {&nbsp; &nbsp; int result = x;&nbsp; &nbsp; result = 31 * result + y;&nbsp; &nbsp; result = 31 * result + z;&nbsp; &nbsp; return result;}当您覆盖equalsand 时hashCode,您应该记住,(1) 如果您的equals方法返回两个对象相同,那么您hashCode必须为它们返回相同的代码。否则,您将在 Hashtable 中看到不可预测的行为。(2) 虽然不是必需的,但如果你的equals方法返回两个对象不相等,那么hashCode应该尝试为这两个对象生成两个不同的值。这有助于实现更好的性能。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java