Kann jemand bitte klären, wenn wir Gleichheit auf Sammlungen überprüfen, wird equals()-Methode auf eingehende Objekt oder auf die Objekte aufgerufen, die es in der Sammlung sind. zum Beispiel. Wenn ein Set oder eine Hashmap die Objekte object1, object2 und object3 hat und ein viertes Objekt namens object4 versucht, in das Set zu kommen oder es wird mit den bereits existierenden drei Objekten im Falle einer Hashmap verglichen, dann wird die equals()-Methode für dieses vierte Objekt aufgerufen und die bereits existierenden drei Objekte werden eins nach dem anderen übergeben oder ist es umgekehrt?
Antworten
Zu viele Anzeigen?Es gibt keine Möglichkeit, dies herauszufinden, es sei denn, Sie erwägen eine sehr spezifische Implementierung der Sammlung. Sie sollten sich nicht darauf verlassen. Die Methode equals sollte reflexiv sein, d.h., x.equals(y)
sollte das gleiche Ergebnis liefern wie y.equals(x)
, es sei denn, einer von ihnen ist null.
Nun... Wie ich gerade in Eclipse überprüft habe, wird die equals()-Methode der eingehenden Objekte aufgerufen. Eclipse übergibt die Referenzen der bereits existierenden Objekte nacheinander an die equals()-Methode des eingehenden Objekts. Ich weiß, dass in Suns equals()-Methodenvertrag steht, dass die equals-Methode reflexiv, symetrisch und transitiv sein soll. Diese Frage kam mir in den Sinn, als ich darüber nachdachte, dass Sammlungen besser optimiert werden könnten, wenn irgendwie pro-aktiv geprüft würde, ob die beiden Referenzen (die auf Gleichheit geprüft werden) auf dasselbe Objekt zeigen oder nicht. Wenn dies der Fall ist, macht es Sinn, die equals()- und hashcode()-Methode zu umgehen.