Gewusst wie: hinzufügen ArrayList-Elemente im TreeSet oder TreeMap
Wie wir alle wissen, die wir implementieren müssen, um Vergleichbare Schnittstelle und hinzufügen von compareTo() wenn wir mit TreeSet. Tut man das nicht, wirft classcastexception-Fehler.
Jetzt habe ich ein TreeSet und ich muss hinzufügen, ArrayLists als Elemente eines TreeSet.
wenn wir schreiben:
ArrayList al = new ArrayList();
ArrayList al2 = new ArrayList();
ArrayList al3 = new ArrayList();
TreeSet ts = new TreeSet();
ts.add(al);
ts.add(al2);
ts.add(al3);
Wirft classcastexception-Fehler.
Frage: Wie kann ich die ArrayList hinzufügen istances (nicht deren Elemente) zu einem TreeSet oder TreeMap?
- tun Sie wirklich brauchen, fügen Sie die Elemente des Arrays Liste treeset der arraylist selbst?
- ArrayList die Elemente nicht. Ich meine, der Baum sollte im Idealfall enthalten die Liste Referenz in Knoten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wirklich brauchen, um hinzuzufügen, array-Liste (als Beispiel) und nicht seine Elemente, die Sie verwenden sollten, einen anderen Konstruktor eher als die leere, sollten die Konstruktor wobei als parameter ein Komparator.
TreeSet(Comparator<? super E> comparator)
Können Sie definieren vorab ein Komparator für Ihre Zwecke mit der Bedeutung, die Sie wirklich wollen, mit Bezug auf die betroffenen arraylists.
Dann fügen Sie die array-Liste der Instanzen, die korrekt gegenüber nach Ihren Komparator.
Als ein Beispiel, können Sie definieren einen Komparator, das wäre zu vergleichen array-Listen anhand Ihrer Größe (Stichprobe einfacher Vergleich):
Dann in deinem code:
Hinweis: die
Dies ist tatsächlich ein gutes Beispiel für den Unterschied zwischen Vergleichbaren und Komparator:
Schauen Sie auch diese SO Q/A für weitere details auf Vergleichbare vs Komparator.
Derzeit, das Sie hinzufügen, ArrayList-Objekte und die Elemente nicht in Ihnen. Wie beschrieben in einer anderen Antwort, mit der addAll funktioniert, weil es letztendlich gehen durch jede ArrayList und fügen Sie die einzelnen Elemente.
1) Wie schon gesagt, das Sie hinzufügen, ArrayList zu TreeSet, nicht ein element in ArrayList.
2) Es ist nicht empfohlen, die Verwendung von raw-Typen, wie Listen und Sets sind generische Typen:
oder:
EDIT: 3) wahrscheinlich, die Sie hinzufügen möchten ArrayList zu TreeSet, dann haben Sie zu erklären, den Satz wie dieser: