
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;
