0

在我的 Java 程序中,我有一个包含 2D 数组的 TreeSet。但是,我不希望其中有任何重复项,因此我决定创建一个实现 Comparator 的类,以便使用 TreeSet 的 contains() 方法,看看我是否添加了重复项。但是,contains() 有时似乎无法正常工作。这是比较器:

public class ComparatorMatrix implements Comparator<int[][]> {

public int compare(int[][] matrix1, int[][] matrix2) {
    if(Arrays.deepEquals(matrix1, matrix2)) {return 0;}

    return -1;
}

我没有实现 equals() 方法,也不知道该怎么做。我应该怎么办?

4

1 回答 1

0

ComparatorMatrix 不满足 Comparator 的定义,这就是您遇到问题的原因。正如 Carl Manaster 所说,如果 compare(a,b) 返回 -1,您需要正确返回 compare(b,a) 必须返回 1,否则它将无法在 TreeSet 中工作。

如果没有排序的定义,那么您必须使用另一个 HashSet。然后,你只需要实现hashCode和equals;equals 已经实现。您可以轻松地将矩阵包装在缓存 hashCode 的对象中,因此您不必每次都重新计算它。

于 2012-03-09T23:41:37.507 回答