对于作为数组的键,映射为equals()

时间:2012-03-19 13:39:32

标签: java

我正在使用一个TreeMap(SortedMap),其键为Object [],其元素类型各异。

TreeMap的equals()在Object []上不起作用,就像Arrays的equals()一样 - 这意味着当使用像containsKey()和get()这样的方法时它将不起作用,除非我解决它。

是否存在某种解决方案,不涉及创建一个全新的类?

编辑:

为了说清楚,我做了一个错误的假设。创建new Comparator(){}也会影响使用相等性的每个方法,例如equals(),而不仅仅是树分类器。

2 个答案:

答案 0 :(得分:7)

  

是否有某种解决方案可以创建一个全新的类?

没有。事实上,你根本不应该为地图键使用可变值。

答案 1 :(得分:2)

虽然我同意Matt Ball您通常不应该使用可变(可更改)类型作为密钥,但只要您不打算使用TreeMap,就可以使用Map一旦数组在树中,就修改它们。

这个解决方案确实涉及创建一个类,但不是一个新的implements Comparator<Object[]>类,这就是你所要求的。相反,您需要创建自己的类Arrays.equals(),它可以比较数组。该类可以使用{{1}}方法来确定它们是否相等,但是当数组不相等时,还需要一个一致的规则来确定哪个数组在另一个数组之前。