为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

互换的青春 2021-05-31 17:18:02
我有一些看起来像这样的 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该类有三个指定坐标的整数。
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

您需要覆盖类的equals和hashCode方法ThreeDimensionalPoint。


假设你的属性ThreeDimensionalPoint是维度 (x, y, z),下面是一个从 IntelliJ Idea 生成的例子。


 @Override

public boolean equals(Object o) {

    if (this == o) return true;

    if (o == null || getClass() != o.getClass()) return false;


    Coordinate that = (Coordinate) o;


    if (x != that.x) return false;

    if (y != that.y) return false;

    return z == that.z;


}


@Override

public int hashCode() {

    int result = x;

    result = 31 * result + y;

    result = 31 * result + z;

    return result;

}

当您覆盖equalsand 时hashCode,您应该记住,


(1) 如果您的equals方法返回两个对象相同,那么您hashCode必须为它们返回相同的代码。否则,您将在 Hashtable 中看到不可预测的行为。


(2) 虽然不是必需的,但如果你的equals方法返回两个对象不相等,那么hashCode应该尝试为这两个对象生成两个不同的值。这有助于实现更好的性能。


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信