java - 如何从 3 个整数组成 HashMap 的键?

我需要从 3 个整数到一个对象的唯一映射。我不能对这些整数的值做出任何假设,除了它们是正的。

我目前使用这样的 HashMap 来实现它:

int a = 10;
int b = 20;
int c = 30;
Map<String, MyObject> map = new HashMap<>();
map.put(a + "_" + b + "_" + c, myObject);

虽然这可行,但它看起来有点丑。

有没有更好的选择,既不引入冲突,也不使用第 3 方库?

编辑:我刚刚意识到我实际上可以对我的整数做出更具体的假设。它们都在 1,000,000 到 2,000,000 之间,它们的权重在底部,因为它们是从 1,000,000 开始计数的序列。

最佳答案

final class Key{
     int a , b , c;
     public Key(int a , int b , int c){
         this.a = a;
         this.b = b;
         this.c = c;
     }

     public int hashCode(){
          return (a << 10 ^ b << 5 ^ c);
     }

     public boolean equals(Object o){
          if(!(o instanceof Key))
               return false;

          Key k = (Key) o;

          return (k.a == a && k.b == b && k.c == c);
     }
}

这甚至对负值也有效。

https://stackoverflow.com/questions/29566711/

相关文章:

ruby-on-rails - 如何在日期选择中降序显示年份?

html - 删除特定的 td 边框?

eclipse - .gitignore 文件在每次项目发生变化时添加 "/bin/"

java - RestEasy 忽略枚举的 @JsonCreator 方法

mongodb - 将mongo集合导入现有集合而不覆盖它

php - 无法以正确的格式导出 xlsx 或 xls 所有数据都是困惑的

php - fatal error : Call to undefined function mb_

php - 使用 php mail() 函数发送链接

php - 如何在codeigniter中使用回调函数

wpf - 如何将打印到标签上的文本设为粗体、斜体或下划线?