如何将两个long映射到一个整数(Java)

时间:2012-01-20 14:53:58

标签: java map

我有两种由long标识的对象,这些对象应该映射到int类型矩阵中的列索引或行索引。有数千个要映射的对象,并且只有ID的组合是唯一的(例如(1,1) - > 0;(1,2) - > 1; ...(2,2) - > ...))。

密钥是Map<String, Integer>的{​​{1}}是可行的方式还是有更好的解决方案?

由于

3 个答案:

答案 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);

它不能保证是唯一的,但它不使用任何内存。