我需要从 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/