java - Java 中二维数组的替代方案

标签 java dictionary hashtable

我有一个查找表,应该通过两个单独的键值访问。一种丑陋的方法是:

int[][] myArray = new int[256][256];
myArray[key1][key2] = 25;

其中 key1 和 key2 是之前动态生成的 key 。但这是相当丑陋的。似乎更好的方法是使用 Map,但它们需要一个键,而不是两个。 Java 本身不支持元组,那么我应该使用什么来代替呢? (使用数组作为键似乎也很尴尬)。

编辑:我说这不是特别漂亮的原因是我的数组实际上是由字符值而不是整数引用的。它们可以互换使用,但对我之前问题的回答似乎表明不然:

2D Array in Java, Indexed by Characters

最佳答案

这有什么难看的?这就像 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/

相关文章:

java - 如何从给定值获取平均值

java - 禁止 JSON 中的单引号值

java - Spring MVC @PathVariable 被截断

java - 从 groovy 中的嵌套映射返回一维映射

python - 在python中,组合2个字典的值

c++ - EXC_BAD_ACCESS(code=1, address=0x0) 在将 std::map 作为参数传递给虚函数调用时发生

C# : Using hashtables to store two of the same value. 这可能吗?

c - 如何处理索引大于 32 位的数据结构?

perl - 子程序返回值(作为数组)可以用在 Perl 的散列声明中吗?

java - maven-resources-plugin :2. 6 - 无法创建资源输出目录