我有一个查找表,应该通过两个单独的键值访问。一种丑陋的方法是:
int[][] myArray = new int[256][256];
myArray[key1][key2] = 25;
其中 key1 和 key2 是之前动态生成的 key 。但这是相当丑陋的。似乎更好的方法是使用 Map,但它们需要一个键,而不是两个。 Java 本身不支持元组,那么我应该使用什么来代替呢? (使用数组作为键似乎也很尴尬)。
编辑:我说这不是特别漂亮的原因是我的数组实际上是由字符值而不是整数引用的。它们可以互换使用,但对我之前问题的回答似乎表明不然:
最佳答案
这有什么难看的?这就像 Java 中的 2D 矩阵一样简单,而且速度也很快。
如果您确实想使用 map ,只需定义您自己的 Tuple
类来用作键 - 但请确保您override equals()
and hashCode()
correctly !我建议实现一个不可变的 Tuple
类,因为使用可变对象作为映射键可能会导致严重的问题。
元组.java
package q5128376;
import java.util.Arrays;
public class Tuple<T>
{
private T[] values;
private int hashCode;
private Tuple(T... values)
{
this.values = values;
this.hashCode = hashCode(values);
}
public static <T> Tuple<T> create(T... values)
{
return new Tuple<T>(values);
}
private static <T> int hashCode(T... values)
{
return 31 * Arrays.hashCode(values);
}
@Override
public int hashCode()
{
return hashCode;
}
@Override
public boolean equals(Object obj)
{
if (this == obj) return true;
if (!(obj instanceof Tuple<?>)) return false;
Tuple<?> other = (Tuple<?>) obj;
if (!Arrays.equals(values, other.values)) return false;
return true;
}
}
关于java - Java 中二维数组的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128376/