Wie erzeugen SortedSet (z.B. TreeSet) für Elemente vom Typ BitSet
Ich habe eine Reihe (power(2,k))
des BitSet-Objekte und ich wollen speichern Sie Sie in einem SortedSet
. Ich benutze den code:
Set <BitSet> S= new TreeSet<>();
Bin ich aber immer diese Fehlermeldung: java.lang.ClassCastException: java.util.BitSet cannot be cast to java.lang.Comparable
Wie implementiere ich vergleichbares interface? Oder gibt es irgendeine andere Möglichkeit zum Sortieren dieser Elemente vom Typ BitSet
?
Welche Bedeutung wollen Sie für
Die Absicht ist, zu Sortieren, diese Sammlung von BitSet-Objekte und so compareTo.
Das problem ist
Ich brauche aufsteigender Reihenfolge dieser BitSet-Objekte. Gibt es einen anderen Ausweg als die Verwendung von TreeSet?
Definieren Sie aufsteigender Reihenfolge.
compareTo()
? Kardinalität?Die Absicht ist, zu Sortieren, diese Sammlung von BitSet-Objekte und so compareTo.
Das problem ist
BitSet
nicht implementiert compareTo
, so müssen Sie definieren Ihre eigene Bestellung von BitSet
. Was ist Ihre gewünschte Bestellung?Ich brauche aufsteigender Reihenfolge dieser BitSet-Objekte. Gibt es einen anderen Ausweg als die Verwendung von TreeSet?
Definieren Sie aufsteigender Reihenfolge.
InformationsquelleAutor Kaur | 2013-03-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Möglichkeiten, um ein
TreeSet
.Comparable
Comparator
Objekt, vergleicht die Elemente IhrerTreeSet
.Da Sie möchten Ihre
TreeSet
enthaltenBitSet
s, undBitSet
nicht implementiertComparable
sind, müssen Sie IhreTreeSet
eine benutzerdefinierteComparator
. Wie Sie umsetzen, dassComparator
ist bis zu Ihnen.Den Komparator kann wie folgt Aussehen
Die
CustomBitSetComparator()
enthält keineBitSet
s. Er vergleicht Sie. Es implemntsComparator<BitSet>
, die eine Funktioncompare(BitSet, BitSet)
dass dieTreeSet
verwendet, um zu vergleichen die eingehendenBitSet
s. Schreiben Sie diese Klasse selbst.InformationsquelleAutor ILMTitan
Ich würde Sie zu konvertieren BigIntegers (O(N)) und verwenden Sie ein TreeSet. Sonst haben Sie zu schreiben, selbst einen Vergleicher, die in der Natur der Dinge läuft unerträglich langsam, wie Sie sehen können, von anderen Antworten. Ich würde auch erwägen, PriorityQueue, statt einen Satz.
InformationsquelleAutor user207421
Ich bin mir nicht sicher, warum Sie wollen, um BitSet in einen treeSet, während eine Lösung ist, erstellen Sie eine wrapper-Klasse implementiert Vergleichbar - Schnittstelle.
dann in den client-code, fügen Sie Instanz CustomComparableBitSet in treeset.
Ok, wenn man Tausende von BitSet-Objekten, erstellen von wrapper-Objekten möglicherweise nicht eine gute Idee, denn es bringt in einigen Speicher-overhead. Wie wärs erstreckt BitSet-Klasse und implementiert Vergleichbar. public class CustomeComparableBitSet<T> erweitert BitSet implements Vergleichbar<T> { public int compareTo(T arg0) { int i = 0; // TODO änderung, die ich basierend auf Ihren Vergleich Logik return i; } }
InformationsquelleAutor spiritwalker