Zielony Smok - logo witryny

Równość macierzy i hashCode (Java)

Macierze są równe wtedy i tylko wtedy gdy mają:

  • taki sam rozmiar
  • każdy element pierwszej macierzy i odpowiadający mu element drugiej macierzy są równe

Równość macierzy w języku Java możemy sprawdzić przy użyciu poniższej metody equals. Przy okazji pokazuję metodę hashCode:

 @Override
    public boolean equals(Object other) {
        if (this == other) {
            return false;
        }
        if (other == null) {
            return false;
        }
        if (getClass() != other.getClass()) {
            return false;
        }
        Matrix o = (Matrix) other;
        if (getRowCount() != o.getRowCount() || getColCount() != o.getColCount()) {
            return false;
        }
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                if (array[i][j] != o.array[i][j]) {
                    return false;
                }
            }
        }
        return true;
    }
}
 @Override
    public int hashCode() {
        long b = 1L;
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColCount(); j++) {
                double cell = 0.0;
                try {
                    cell = getCell(i, j);
                } catch (MatrixException e) {
                    e.printStackTrace();
                }
                if (cell != 0.0) {
                    b = 31L * b + Double.doubleToLongBits(cell);
                } else {
                    b *= 31L;
                }
            }
        }
        return (int) (b ^ (b >> 32));
    }

Przykład sprawdzania macierzy znajdziemy w klasie Matrix010.java:

Klasa Matrix010.java

Tworzymy dwie macierze jednostkowe i sprawdzamy czy są równe.

 Matrix matrix = new Matrix(3, 3);
        try {
            matrix.setToIdentity();
        } catch (MatrixException e) {
            e.printStackTrace();
        }
        Matrix matrix1 = new Matrix(3, 3);
        try {
            matrix1.setToIdentity();
        } catch (MatrixException e) {
            e.printStackTrace();
        }
        System.out.println(matrix.equals(matrix1));

Po uruchomieniu klasy na konsoli zobaczymy:

true

Pliki do ściągnięcia

matrices004.zip

Moduł matrices – aktualny stan projektu = 004;