Java ArrayList IndexOf - Objektindex finden

7

Sagen wir, ich habe eine Klasse

%Vor%

Und ich füge ein paar Data-Objekte zu einer ArrayList:

%Vor%

Warum findet indexOf das nicht?:

%Vor%

Ist indexOf besser als die gesamte Array-Liste selbst durchzugehen? Oder vermisse ich etwas.

    
p1001 08.07.2013, 04:02
quelle

4 Antworten

17

Die Methode indexOf() durchläuft die gesamte Liste. Hier ist ein Auszug aus Java 7 Quellcode:

%Vor%

Es wäre besser, Java durchgehen zu lassen, als es selbst zu schreiben. Stellen Sie nur sicher, dass Ihre Methode equals ausreicht, um das gewünschte Objekt zu finden. Sie sollten auch hashCode() überschreiben.

Ich werde deine equals Methode nicht schreiben, aber ich würde dir zumindest empfehlen:

  • Auf Null prüfen
  • Testen Sie, ob die Instanzen, die Sie vergleichen, die gleichen sind
  • Sie müssen nicht if(boolean_expr) { return true; } ; gib einfach den booleschen Ausdruck zurück.
  • Stellen Sie sicher, dass Sie Ihre equals -Methode überschreiben - die Signatur davon erfordert einen Object -Parameter, nicht Date .
Makoto 08.07.2013, 04:04
quelle
8

Die Signatur Ihrer equals -Methode ist falsch. Sie überschreiben das equals in Object nicht, sondern überladen es nur.

Um das Verhalten der Methode equals in Object zu überschreiben, muss Ihre Signatur genau mit der in Object übereinstimmen. Versuchen Sie Folgendes:

%Vor%

Außerdem empfiehlt es sich, die Methode hashCode zu überschreiben, damit Ihr Objekt in kartenbasierten Sammlungen korrekt funktioniert.

    
Venkat 08.07.2013 04:36
quelle
2

Die Antwort von Makoto ist richtig. Das gleiche würde ich sagen. Aber Sie haben einige Fehler in Ihrem Code oben.

  1. Sie haben "public boolean equals (Date m) {" geschrieben. Ich denke, du meintest Data statt Date.
  2. Du hast "if (this.k == m.k & amp; & this.l = m.l)" geschrieben. Die zweite Bedingung in if muss "==" sein.

Auf Ihre Frage: Makotos Antwort ist eine Lösung. Meine Lösung besteht darin, die Hilfe von eclipse zu verwenden, um die Methoden hashcode und equals automatisch zu generieren. So:

%Vor%     
budo 09.12.2016 13:50
quelle
-2

Per Konvention möchten Sie den Hashcode auch überschreiben, wenn Sie equals

überschreiben

Sie werden höchstwahrscheinlich feststellen, dass indexOf die Hashcode-Methode verwendet, um das Objekt nicht mit dem equals

abzugleichen

Wenn Sie eclise benutzen, um Ihren Code zu bearbeiten, wird eclipse aus dem "source" -Menü eine gute equals- und hashcode-Methode generieren.

    
user2480415 08.07.2013 04:12
quelle

Tags und Links