Hallo, ich versuche mehrere Objekte in ein TreeSet einzufügen.
Warum befindet sich in meinem Treeset treeSet nur ein Object obwol ich
fünf Objekcte eingefügt habe? Was muss ich machen damit ich alle fünf Objektcte
in das TreeSet einfügen kann?
Vielen Dank für jede Antwort !!!
Code:
import java.util.TreeSet;
import java.lang.Comparable;
class Tiere implements Comparable <Tiere> {
String art = "";
Tiere(String art){
this.art = art;
}
@Override
public int compareTo(Tiere o) {
return 0;
}
}
public class TreeSetTest {
public static void main(String[] args) {
TreeSet<Tiere> treeSet = new TreeSet<Tiere>();
Tiere tier1 = new Tiere("Löwe");
Tiere tier2 = new Tiere("Affe");
Tiere tier3 = new Tiere("Maus");
Tiere tier4 = new Tiere("Tiger");
Tiere tier5 = new Tiere("Elefand");
treeSet.add(tier1);
treeSet.add(tier2);
treeSet.add(tier3);
treeSet.add(tier4);
treeSet.add(tier5);
System.out.println(treeSet.size());
for (Tiere i : treeSet) {
System.out.println(i);
}
}
}
Warum befindet sich in meinem Treeset treeSet nur ein Object obwol ich
fünf Objekcte eingefügt habe? Was muss ich machen damit ich alle fünf Objektcte
in das TreeSet einfügen kann?
Weil du die compareTo Methode einfach falsch implementiert hast, implementiere sie richtig und funktioniert.
Anmerkungen zu deinem Code:
Code:
class Tiere implements Comparable <Tiere> {
Sollen Objekte deiner Klasse "Tiere" eine Tierart darstellen, eine einzelnes Tier oder eine Gruppe von Tieren?
"Tiere" ist eine schlechte Wahl als Klassennamen da es sich um eine Mehrzahl handelt. Entweder "Tier" (für ein einzelnes Tier) oder "Tierart" wenn du die Tierart darstellen willst.
Weil dein compareTo müll ist. TreeSet benutzt die compareTo Methode um herauszufinden ob ein objekt größer/kleiner oder gleich einem anderen ist.
Da du immer 0 zurückgibst, bedeutet dies für das TreeSet, das alle Objekte die eingefügt werden das selbe sind.
@InfectedBytes, wenn ich's ohne das Interfaces Comparable und die Methode compareTo mache bekomme ich eine ClassCastException:
Code:
Exception in thread "main" java.lang.ClassCastException: Tier cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1294)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)
at TreeSetTest.main(TreeSetTest.java:31)
Hat ja auch keiner gesagt das du die Implementierung von "Comparable" weglassen sollst. Es wurde nur gesagt das du die Methode compareTo sinnvoll implementieren sollt.
Vielen Dank für eure hilfreichen Kommentare !!!
Ich habe es nun durch die folgende Ausformulierung der compareTo Methode gelöst.
Falz es an meiner Implementierung was zu kritisieren gibt nur raus damit.
Code:
public int compareTo(Tier t){
return this.art.compareTo(t.art);
}