Wie setze ich einen endgültigen Hashcode -Wert in einem Java -Datensatz festJava

Java-Forum
Anonymous
 Wie setze ich einen endgültigen Hashcode -Wert in einem Java -Datensatz fest

Post by Anonymous »

Für unveränderliche Klassen möchte ich den HashCode -Wert beim Aufbau des Objekts festlegen. (Ich mache das manchmal auch für den ToSstring -Wert.) Ich möchte dies auch in einem Datensatz tun. Zum Beispiel habe ich ein Spiel, das Zeilen und Spalten verwendet, und Zeilen überschreiten nie 18, und Spalten überschreiten 3. Wenn ich es also als Klasse schreibe, könnte ich Folgendes schreiben: < /p>

Code: Select all

public final class RowColumn {
private final int row;
private final int column;
private final int hashCode
private final String toString;

public RowColumn(int row, int column) {
this.row = row;
this.column = column;
this.hash = row * 100 + column;
this.toString = String.format("%02d %2d", row, column);
}

@Override
public int hashCode() { return hash; }

@Override
public String toString() { return toString; }

// ... getters, equals methods go here.
}
< /code>
Ich mag diesen HashCode, weil ich die Zeile und die Spalte daraus lesen kann, was beim Debuggen sehr hilfreich sein kann. Und da der HashCode aus zwei Endwerten berechnet wird, macht es keinen Sinn, ihn jedes Mal neu zu berechnen, wenn wir HashCode () 
aufrufen. Und da ich dies in einem Hash -Set verwenden möchte, macht es keinen Sinn für faule Instanziierung wie folgt: < /p>

Code: Select all

private int hash = -1;
@Override
public int hashCode() {
if (hash == -1) {
hash = row * 100 + column;
}
return hash;
}
< /code>
Ich werde also den Hash-Wert voraberhalten. Aber soweit ich das beurteilen kann, kann ich diese Werte nicht vorbereiten, wenn ich diese Klasse als Datensatz schreibe. (Ich mache mir weniger besorgt über die Methode toString () 
, da ich sie nur beim Debuggen verwenden werde.)
, bevor Sie mir sagen, dass diese Klasse so einfach ist, dass jeder Leistungs -Treffer geringfügig ist. Ich sollte darauf hinweisen, dass die meisten Datensätze komplizierter sind. Wenn der Datensatz viele Felder von verschiedenen unveränderlichen Typen enthält, werden die Vorbereitung des Hash-Werts und der Zeichenfolge nützlicher.
Gibt es eine Möglichkeit, dies in einem Datensatz zu tun?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post