我正在尝试使用数组作为 HashMap 中的键。数组的长度为 2,因此基本上充当 2 元组。实现自定义 2 元组类是最后的手段。问题是,如果它们具有不同的内存位置,我希望具有相同内容的数组映射到 HashMap 中的不同位置。我知道 Arrays.hashCode 和 Arrays.deepHashCode 中有 hashCode 函数,但是有什么方法可以将它们用于 HashMap。正如我已经说过的,我真的不想实现自己的元组类。
问问题
135 次
3 回答
3
我不会推荐这种方法。
键必须是不可变的。除非您制作阵列,否则它将充满危险。
Java 是一种面向对象的语言。我认为在原语方面考虑太多是错误的。在对象中封装您需要的正确行为。
为什么创建自己的班级如此压抑?最后一招?我不明白为什么这是一个大问题。创建它,让它不可变,清楚地记录你的意图,然后继续前进。
更新:我不会让你已经有一个有缺陷的元组类的事实阻止你在这种情况下做正确的事情。你说你有“数百堂课”——我说多做一个正确的事不会让你失望。由于“实际”的积累,代码最终会陷入混乱,就像你即将做出的那样糟糕的决定。通过为这个狭窄的问题创建正确的解决方案来解决不添加问题的方法,并开始从那里找到更好的答案。
于 2012-06-23T16:35:25.210 回答
1
问题是,如果它们具有不同的内存位置,我希望具有相同内容的数组映射到 HashMap 中的不同位置。
如果数组有不同的内存位置,或者数组的内容有不同的内存位置?如果是前者,您可能可以使用 anIdentityHashMap
而不是 normal HashMap
。但是,如果是后者,那么我强烈同意@duffymo 的回答:成长一对;)
于 2012-06-23T16:48:28.620 回答
0
好的,我找到了解决方案。我没有使用数组,而是使用了 List。这是有效的,因为 List 通过内容而不是通过引用来确定相等性。
于 2012-06-24T15:34:12.190 回答