Angenommen, ich erstelle ein Objekt und füge es zu meinem ArrayList
hinzu. Wenn ich dann ein anderes Objekt mit genau der gleichen Konstruktoreingabe erstelle, wertet die Methode die beiden Objekte als gleich aus? Angenommen, der Konstruktor macht mit der Eingabe nichts Lustiges, und die in beiden Objekten gespeicherten Variablen sind identisch. Wie bewertet die Methode contains() einer ArrayList Objekte?
ArrayList<Thing> basket = new ArrayList<Thing>();
Thing thing = new Thing(100);
basket.add(thing);
Thing another = new Thing(100);
basket.contains(another); // true or false?
class Thing {
public int value;
public Thing (int x) {
value = x;
}
equals (Thing x) {
if (x.value == value) return true;
return false;
}
}
Ist dies, wie die class
sollte Rückkehr true
haben umgesetzt werden?
Falls Sie planen, equals() zu überschreiben, stellen Sie sicher, dass Sie auch die Methode hashcode() außer Kraft setzen. Wenn Sie nicht möchten, funktionieren die Dinge möglicherweise nicht wie erwartet, wenn Sie Sammlungen verwenden. –
Dies ist eine korrekte Antwort, aber beachte, dass du deine equals-Methode ändern musst, um ein "Objekt" anstelle einer "Sache" zu akzeptieren. Wenn Sie dies nicht tun, wird Ihre equals-Methode nicht verwendet. :) – mdierker
Nur für mich selbst entdeckt, dass Eclipse "Generate HashCode() und Equals" im Menü Quelle hat. –