java - 如何在我定义的 Java 对象中覆盖返回具有唯一实体 ID 的唯一哈希码值的哈希码方法?

标签 java dictionary hashmap compare hashcode

我遇到了一个使用复杂 Map 的情况,它使用我定义的 Java 对象作为它的键,要做到这一点,这个对象的类需要实现接口(interface) Comparable 并覆盖 Object 的 hashcode 和 equals 方法,我想使用唯一 ID这个类的对象的hashcode,但是唯一的ID是Long类型,hashcode返回的值的类型是Integer,如果对象的ID增加到一个非常大的,这可能会导致数据损坏和不一致。

有什么方法可以将唯一的长类型 ID 转换为也可用于在对象之间进行识别的哈希码吗?

最佳答案

最简单的解决方案是依赖 java.lang.Long 的内置 hashCode():

@Override
public int hashCode() {
    return Long.valueOf(getId()).hashCode();
}

编辑:
根据下面的评论,如果 id 存储为 java.lang.Long 而不是原始 long,则更简单:

@Override
public int hashCode() {
    return getId().hashCode();
}

关于java - 如何在我定义的 Java 对象中覆盖返回具有唯一实体 ID 的唯一哈希码值的哈希码方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25737641/

相关文章:

encryption - 在键值存储中查找加密 key

java - 宽度和高度为 match_parent 的 Recyclerview 返回固定大小错误

java - 激活 Java Swing 工具提示时会发生什么?

具有命名/标记类型的 C# 字典

json - 嵌套字典转换为 json swift

python - 通过 scrapy 管道抓取时字典中的 “TypeError: ' unicode ' object does not support item assignment”

Java Hashmap 迭代 : Look at two values at once?

java - 简单的 Java 正则表达式匹配器不工作

java - 从二进制文件中读取整数

Ruby 内部机制以及如何保证哈希值的唯一性