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

标签 java 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);
     }
}

这甚至对负值也有效。

关于java - 如何从 3 个整数组成 HashMap 的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566711/

相关文章:

java - AbstractClass.getInstance() 方法是一种反模式吗

java - 通常的 hibernate 性能陷阱

java - 占位符的 setImageDrawable 与 setBackground

java - EntrySet()对于Java中实现Map.Entry的自定义类的适用性

c++ - Google 的 dense_hash_map 在 set_empty_key() 函数中崩溃

java - ClassCastException : java. util.ArrayList 不可比较

java - 高效算法(散列、排序)

java - 从 log4j 迁移到 log4j2 - 属性文件配置

java - 将 map 与 Java 中的列表进行比较

java - JDK 1.6 和 JDK 1.7 中 ConcurrentHashMap 的不同 `next` 条目