![]() |
[JAVA] List contains
Wie euch wohl auffällt, beschäftige ich mich zur Zeit mit Java. :stupid: Deshalb gleich nochmal eine Frage:
![]() Zitat:
Code:
Im Hauptprogramm habe ich ein Methode addPerson, die eine Peron erzeugt und einer ArrayList hinzufügt:
public class Persons extends BeingsObject implements Comparable<Persons>{
private String personNumber; public Persons(String personNumber){ this.personNumber = personNumber; } public String getpersonNumber() { return this.personNumber; } @Override public int compareTo(Persons otherperson) { return personNumber.compareTo(otherperson.getpersonNumber()); }; public boolean equals(Persons r){ return this.personNumber.equals(r.personNumber); } }
Code:
Interessant ist jetzt die Ausgabe:
myBS.addPerson("Albert");
myBS.addPerson("James"); myBS.addPerson("MrSpock"); myBS.addPerson("Hetfield");
Code:
Es gibt also ein Element, das die equlas Bedingung erfüllt, trotzdem gibt contains false zurück. Warum?
Persons searchFor = new Persons("Albert");
System.out.println("persList contains Albert " +myBS.PersonsList.contains(searchFor)); // gibt false zurück System.out.println("equal? "+myBS.PersonsList.get(0).equals(searchFor)); // gibt true zurück |
AW: [JAVA] List contains
Weil die Liste wohl eher die Object-Pointer vergleicht und nicht den Wert. Ist intern wahrscheinlich nicht mit .equals() sondern mit == implementiert...
|
AW: [JAVA] List contains
Hi,
ich denke, dass das Problem an deiner Definition der equals-Methode liegt. Probier mal folgendes:
Code:
(ungetestet)
@Override
public boolean equals(Object o) { if (o != null && o instanceof Persons) { return this.personNumber.equals(((Persons)o).getpersonNumber()); } else { return false; } } |
AW: [JAVA] List contains
Hallo patti,
ja, so hab ich es auch schon probiert, dann funktioniert es. NetBeans gibt aber die Warnung aus: Zitat:
|
AW: [JAVA] List contains
Hm, equals() und hashCode() sind (u.a.) dazu gedacht, Objekte in einer collection gemäß den Anforderungen verwalten zu können. Sobald eine der beiden Methoden überschrieben wird, die andere jedoch nicht, scheint NetBeans diese Warnung auszugeben, um anzuzeigen, dass es zu einer Inkonsistenz kommen könnte. Wenn man sicher weiß, dass man nur Methoden der collection benutzt, die z.B. equals() aufrufen, dann kann man die Warnung wahrscheinlich sogar ignorieren (evtl. lässt sich diese Warnung auch in den Einstellungen ausschalten). Ansonsten bleibt wohl bloß übrig, die Methode hashCode() gemäß den eigenen Anforderungen ebenfalls zu überschreiben...
|
AW: [JAVA] List contains
Hi,
bietet NetBeans keine Möglichkeit sich diese Methoden automatisch erzeugen zu lassen? In Eclipse kann man das sehr komfortabel machen und bei ner größeren Menge an Datenfeldern spart es viel Tipparbeit und reduziert somit auch die Fehlermöglichkeiten. LG, Frederic |
AW: [JAVA] List contains
Habe keine Funktion gefunden, es automatisch machen zu lassen. Jetzt habe ich auch hashCode überschrieben und übergebe einfach den hashCode, den die String Klasse aus einem String erzeugen kann. Damit funktioniert nun alles und es gibt auch keine Warnung mehr.
Danke. |
AW: [JAVA] List contains
![]() |
AW: [JAVA] List contains
Hallo patti,
mein Apple hat keine INSERT Taste. Ich meine aber es ist das Menue, dass mit mit crtl+space angeboten wird. Dort konnte ich gerade die equals Methode autognerieren lassen. :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz