我有两种由long
标识的对象,这些对象应该映射到int
类型矩阵中的列索引或行索引。有数千个要映射的对象,并且只有ID的组合是唯一的(例如(1,1) - > 0;(1,2) - > 1; ...(2,2) - > ...))。
密钥是Map<String, Integer>
的{{1}}是可行的方式还是有更好的解决方案?
由于
答案 0 :(得分:11)
创建一个包含2个long的对象并覆盖equals和hashcode方法。然后,您可以将其用作密钥。
答案 1 :(得分:4)
为什么不创建一个对象来保存这两个long
变量。
class Key {
private long var1;
private long var2;
boolean equals(Object o) {...}
int hashCode() {...}
};
答案 2 :(得分:1)
如何从两个longs
创建哈希
您可以使用
从long创建哈希long l = ...
int hash = (int) ((l >> 32) ^ l);
两个长片你可以在那里结合
long a = ..., b = ...
long l = a * 31 + b;
int hash = (int) ((l >> 32) ^ l);
它不能保证是唯一的,但它不使用任何内存。