您将 Integer[] 放入地图中,而不是整数。Integer[] 不会覆盖 Objects equals,所以它会被调用。为了解决这个问题,您可以编写一个包装类,对数组的内容调用 equals,如下所示:
public class ArrayWrapper<E> {
private E[] data;
public ArrayWrapper(E[] data) {
this.data = Arrays.copyOf(data, data.length);
}
@Override public boolean equals(Object other) {
if (this == other) return true;
if (!(other instanceof ArrayWrapper)) return false;
ArrayWrapper o = (ArrayWrapper)other;
if (this.data.size != o.data.size) return false;
for (int i = 0; i < this.data.size; i++)
if (!this.data[i].equals(o.data[i]) return false;
return true;
}
}
并将此类的实例添加到地图而不是 Integer[]'s,因此将调用此类 equals。