Java中2D数组的替代方案

Java中2D数组的替代方案,java,map,hashtable,Java,Map,Hashtable,我有一个查找表,应该由两个单独的键值访问。一个丑陋的方法是: int[][] myArray = new int[256][256]; myArray[key1][key2] = 25; 其中,key1和key2是先前动态生成的键。但这相当难看。似乎更好的方法是使用地图,但这些需要一个键,而不是两个键。Java本身不支持元组,所以我应该用什么来代替呢?使用数组作为键似乎也很尴尬 编辑:我之所以说这不是特别漂亮,是因为我的数组实际上是由字符值而不是整数引用的。它们可以互换使用,但我对上一个问题的

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

int[][] myArray = new int[256][256];
myArray[key1][key2] = 25;
其中,key1和key2是先前动态生成的键。但这相当难看。似乎更好的方法是使用地图,但这些需要一个键,而不是两个键。Java本身不支持元组,所以我应该用什么来代替呢?使用数组作为键似乎也很尴尬

编辑:我之所以说这不是特别漂亮,是因为我的数组实际上是由字符值而不是整数引用的。它们可以互换使用,但我对上一个问题的回答似乎提出了不同的建议:


你的解决方案在我看来并不难看。。。它的速度非常快,但需要消耗少量内存64 K int

另一种方法是定义一个Pair类作为映射的键

另一个解决方案是定义一个映射int到映射int到int值的映射:

Map<Integer, Map<Integer, Integer>> map;
但是,这需要创建许多贴图对象


最佳方法取决于查找表的稀疏程度。

我觉得您的解决方案并不难看。。。它的速度非常快,但需要消耗少量内存64 K int

另一种方法是定义一个Pair类作为映射的键

另一个解决方案是定义一个映射int到映射int到int值的映射:

Map<Integer, Map<Integer, Integer>> map;
但是,这需要创建许多贴图对象


最佳方法取决于查找表的稀疏程度。

这有什么难看的?这和Java中的2D矩阵一样简单,而且速度也很快

如果您真的想使用映射,只需定义您自己的元组类作为键即可-但请确保您!我建议实现一个不可变元组类,因为使用可变对象作为映射键可能会导致严重的问题

Tuple.java
那有什么难看的?这和Java中的2D矩阵一样简单,而且速度也很快

如果您真的想使用映射,只需定义您自己的元组类作为键即可-但请确保您!我建议实现一个不可变元组类,因为使用可变对象作为映射键可能会导致严重的问题

Tuple.java 我同意你的二维数组一点也不坏

你可以有一张地图的地图,比如

Map<Integer, Map<Integer, Integer>> myMap;
但这可能比你的2d阵列想法更难看

或者,您可以将两个int键转换为一个字符串键,如

Map<String, Integer> myMap = new HashMap<String, Integer>();
int key1 = 3;
int key2 = 4;
int value = 25;
myMap.put(key1 + "/" + key2, value);
但是如果你能保证任意一个键的最大值是255,我建议你使用现有的解决方案。

我同意你的二维数组一点也不坏

你可以有一张地图的地图,比如

Map<Integer, Map<Integer, Integer>> myMap;
但这可能比你的2d阵列想法更难看

或者,您可以将两个int键转换为一个字符串键,如

Map<String, Integer> myMap = new HashMap<String, Integer>();
int key1 = 3;
int key2 = 4;
int value = 25;
myMap.put(key1 + "/" + key2, value);

但是,如果您能保证任意一个键的最大值为255,我建议您使用现有的解决方案。

@thebackhand:请注意,您的Pair类应该重写equals和hashCode才能正常工作。我建议使用ApacheCommonsLangEqualsBuilder和HashCodeBuilder轻松正确地实现它们。另外,使你的结对类不可变。我强烈赞成你的评论,JB,T!请参阅我的答案,了解泛型n元组实现。@反手:请注意,Pair类应重写equals和hashCode以正确工作。我建议使用ApacheCommonsLangEqualsBuilder和HashCodeBuilder轻松正确地实现它们。另外,使你的结对类不可变。我强烈赞成你的评论,JB,T!请参阅我的答案,了解通用n元组实现。equals方法中的null检查是多余的。元组的null instanceof计算结果为false。事实上,对象的null instanceof计算结果为false。@亚当:谢谢,你说得对。我忘了从IDE生成的代码中删除它,我真的不喜欢Eclipse如何做到这一点。。。现在已修复。@Matt Ball,你能给我提供一个测试上述program.Tuple.java程序的主要方法吗?或者请提供一个指向ide生成的源代码的链接。@Deepak:我不理解你的要求。是否要下载代码,用叉子叉就行了。你所说的主要测试方法是什么意思?这不是一个程序,它只是一个供其他代码使用的实用程序类。@mBall,我在那里找不到代码。你给了我链接,但那里没有代码。找不到代码。你能给出方向吗?在equals方法中检查null是多余的。元组的null instanceof计算结果为false。事实上,对象的null instanceof计算结果为false。@亚当:谢谢,你说得对。我忘了从IDE生成的代码中删除它,我真的不喜欢Eclipse如何做到这一点。。。现在已修复。@Matt Ball,您能为我提供一个测试上述程序的主要方法吗?Tuple.java程序,或者请提供一个指向ide生成的源代码c的链接
奥德·迪帕克:我不明白你要什么。是否要下载代码,用叉子叉就行了。你所说的主要测试方法是什么意思?这不是一个程序,它只是一个供其他代码使用的实用程序类。@mBall,我在那里找不到代码。你给了我链接,但那里没有代码。找不到代码。你能告诉我方向吗。