我正在尝试使用数组作为HashMap中的键。阵列长度为2,因此基本上充当2元组。实现自定义2元组类是最后的手段。问题是,我希望具有相同内容的数组映射到HashMap中的不同位置,如果它们具有不同的内存位置。我知道Arrays.hashCode和Arrays.deepHashCode中有hashCode函数,但有什么方法可以将它们用于HashMap。正如我已经说过的,我真的不想实现自己的元组类。
答案 0 :(得分:3)
我不推荐这种方法。
键必须是不可变的。除非你制作阵列,否则它将充满危险。
Java是一种面向对象的语言。我认为在原语方面考虑太多是错误的。封装对象中所需的正确行为。
为什么创建自己的课程如此压抑?最后一招?我不明白为什么这是一个大问题。创建它,使其不可变,清楚地记录你的意图,继续前进。
更新:我不会让你已经有一个有缺陷的元组类的事实阻止你在这种情况下做正确的事情。你说你有“数百个课程” - 我说用一个人做正确的事情不会打破你。通过积累“实际”,糟糕的决定,例如你将要制作的错误,代码最终陷入混乱。通过为这个狭隘的问题创建正确的解决方案,并从那里开始努力寻找更好的答案,决心不添加任务。
答案 1 :(得分:1)
问题是,我希望具有相同内容的数组映射到HashMap中的不同位置,如果它们具有不同的内存位置。
如果数组具有不同的内存位置,或者数组的内容具有不同的内存位置?如果是前者,您可以使用IdentityHashMap
代替普通HashMap
。如果是后者,那么我非常同意@ duffymo的回答:grow a pair;)
答案 2 :(得分:0)
好的,我找到了解决方案。我没有使用数组,而是使用了List。这是因为List按内容确定相等,而不是通过引用。