2 Stimmen

Die Methode Equals() wird für bestehende oder eingehende Objekte in Sammlungen aufgerufen

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?

6voto

JB Nizet Punkte 654813

Die Antwort ist nicht sehr wichtig (und kann zwischen verschiedenen Implementierungen variieren), da sie vertraglich festgelegt ist, A.equals(B) wenn und nur wenn B.equals(A) . Die Nichteinhaltung dieses Vertrags ist ein Rezept für ein seltsames und inkohärentes Verhalten der Sammlungen.

3voto

njlarsson Punkte 1918

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.

2voto

05storm26 Punkte 155

Es sollte keinen Unterschied zwischen a.equals(b) und b.equals(a) geben (wenn a und b nicht null sind). Die Gleichheitsform sollte symmetrisch sein. Es gibt keine Garantie dafür, welche Form (a.equals(b) oder b.equals(a)) verwendet wird.

0voto

Ahmad Punkte 2060

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X