0

私のJavaプログラムには、2D配列を含むTreeSetがあります。ただし、重複したくないので、TreeSetのcontains()メソッドを使用して、重複を追加するかどうかを確認するために、Comparatorを実装するクラスを作成することにしました。ただし、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 に答える