Ich bin gerade dabei zu recherchieren wie sich hashCode() und equals() in z.B. einer HashMap verhalten.
Habe eine Sache bei der ich gerne wissen würde ob diese von mir richtig verstanden wurde.
-Die hashCode() Methode sollte nie einen fixen Wert zurück geben, da Objekte dann immer an der selben Stelle im Bucket gespeichert werden
und der Performance Vorteil für Zugriff, Suche und Einfügen verloren geht. Die O(1) Konstanten Zeiten werden damit zu O(n) linearen Zeiten. (O(n) bedeutet mit zunehmenden Objekten sinkt die Performance linear.
Das Überschreiben der equals() Methode bereitet mir ein wenig mehr Kopfschmerzen.
-Warum muss die equals() Methode aus der Object Klasse überschrieben werden?
-Was für einen Vorteil habe ich wenn meine Implementierung wie folgt aussieht?
Habe eine Sache bei der ich gerne wissen würde ob diese von mir richtig verstanden wurde.
-Die hashCode() Methode sollte nie einen fixen Wert zurück geben, da Objekte dann immer an der selben Stelle im Bucket gespeichert werden
und der Performance Vorteil für Zugriff, Suche und Einfügen verloren geht. Die O(1) Konstanten Zeiten werden damit zu O(n) linearen Zeiten. (O(n) bedeutet mit zunehmenden Objekten sinkt die Performance linear.
Das Überschreiben der equals() Methode bereitet mir ein wenig mehr Kopfschmerzen.
-Warum muss die equals() Methode aus der Object Klasse überschrieben werden?
-Was für einen Vorteil habe ich wenn meine Implementierung wie folgt aussieht?
Java:
public class User {
private long id;
private String name;
private String email;
//Kontruktoren, Getter, Setter
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null)
return false;
if (this.getClass() != o.getClass())
return false;
User user = (User) o;
return id == user.id && (name.equals(user.name) && email.equals(user.email));
}
}