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
Moduł matrices – aktualny stan projektu = 004;