AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[JAVA] List contains

Ein Thema von MrSpock · begonnen am 30. Jan 2011 · letzter Beitrag vom 30. Jan 2011
Antwort Antwort
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#1

[JAVA] List contains

  Alt 30. Jan 2011, 14:39
Wie euch wohl auffällt, beschäftige ich mich zur Zeit mit Java. Deshalb gleich nochmal eine Frage:

Hier findet man, zu der Methode contains folgendes:

Zitat:
contains

public boolean contains(Object o)

Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e)).
Dazu habe ich eine Klasse definiert, die das Interface Comparable und auch die Methode equals definiert.

Code:
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);
    }

}
Im Hauptprogramm habe ich ein Methode addPerson, die eine Peron erzeugt und einer ArrayList hinzufügt:

Code:
myBS.addPerson("Albert");
  myBS.addPerson("James");
  myBS.addPerson("MrSpock");
  myBS.addPerson("Hetfield");
Interessant ist jetzt die Ausgabe:

Code:
 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
Es gibt also ein Element, das die equlas Bedingung erfüllt, trotzdem gibt contains false zurück. Warum?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.604 Beiträge
 
#2

AW: [JAVA] List contains

  Alt 30. Jan 2011, 14:50
Weil die Liste wohl eher die Object-Pointer vergleicht und nicht den Wert. Ist intern wahrscheinlich nicht mit .equals() sondern mit == implementiert...
Sebastian Gingter
Phoenix - 不死鳥
Mein Blog: http://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: [JAVA] List contains

  Alt 30. Jan 2011, 14:51
Hi,

ich denke, dass das Problem an deiner Definition der equals-Methode liegt. Probier mal folgendes:

Code:
@Override
public boolean equals(Object o) {
  if (o != null && o instanceof Persons) {
    return this.personNumber.equals(((Persons)o).getpersonNumber());
  } else {
    return false;
  }
}
(ungetestet)
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

AW: [JAVA] List contains

  Alt 30. Jan 2011, 14:58
Hallo patti,

ja, so hab ich es auch schon probiert, dann funktioniert es. NetBeans gibt aber die Warnung aus:

Zitat:
Fehlende hashCode() erzeugen-Mothode erzeugen.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: [JAVA] List contains

  Alt 30. Jan 2011, 15:11
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...
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#6

AW: [JAVA] List contains

  Alt 30. Jan 2011, 15:29
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
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#7

AW: [JAVA] List contains

  Alt 30. Jan 2011, 15:40
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: [JAVA] List contains

  Alt 30. Jan 2011, 15:49
Hier steht unter "Generating Code Using the Code Generation Dialogs" wie man mit Hilfe von NetBeans diese Methoden automatisch generieren lassen kann.
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#9

AW: [JAVA] List contains

  Alt 30. Jan 2011, 18:14
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz