Comment créer SortedSet (par exemple TreeSet) pour les éléments de type BitSet
J'ai un certain nombre (power(2,k))
de BitSet objets et je veux les stocker dans un SortedSet
. J'utilise le code:
Set <BitSet> S= new TreeSet<>();
Cependant, j'obtiens cette erreur: java.lang.ClassCastException: java.util.BitSet cannot be cast to java.lang.Comparable
Comment puis-je mettre en œuvre interface comparable? Ou est-il une autre façon de classer ces éléments de type BitSet
?
Quel sens avez-vous l'intention de
L'intention est de trier cette collection de BitSet les objets et donc compareTo.
Le problème est
J'ai besoin l'ordre croissant de ces BitSet objets. Est-il un autre moyen de sortir de l'aide TreeSet?
Définir l'ordre croissant.
compareTo()
? Cardinalité?L'intention est de trier cette collection de BitSet les objets et donc compareTo.
Le problème est
BitSet
ne pas mettre en œuvre compareTo
, de sorte que vous devez définir vos propres commandes de BitSet
. Qu'est-ce que votre choix de la commande?J'ai besoin l'ordre croissant de ces BitSet objets. Est-il un autre moyen de sortir de l'aide TreeSet?
Définir l'ordre croissant.
OriginalL'auteur Kaur | 2013-03-11
Vous devez vous connecter pour publier un commentaire.
Il y a deux façons d'utiliser un
TreeSet
.Comparable
Comparator
objet qui compare les éléments de votreTreeSet
.Puisque vous voulez avoir votre
TreeSet
contenirBitSet
s, etBitSet
ne pas mettre en œuvreComparable
, vous devez donner à votreTreeSet
personnaliséComparator
. Comment la mettre en œuvre queComparator
est à vous.Le Comparateur peut ressembler à quelque chose comme ceci
Le
CustomBitSetComparator()
ne contiennent pas deBitSet
s. Il les compare. Il implemntsComparator<BitSet>
, qui a une fonctioncompare(BitSet, BitSet)
que leTreeSet
utilise pour comparer les entrantsBitSet
s. Vous devez écrire cette classe vous-même.OriginalL'auteur ILMTitan
Je voudrais les convertir en BigIntegers (O(N)) et utiliser un TreeSet. Sinon, vous devrez écrire vous-même un Comparateur, qui, dans la nature des choses sera exécuté atrocement lentement, comme vous pouvez le voir dans d'autres réponses. Je voudrais également envisager d'utiliser PriorityQueue au lieu d'un Jeu.
OriginalL'auteur user207421
Je ne suis pas sûr de savoir pourquoi vous voulez mettre BitSet dans un treeSet, tandis qu'une solution de contournement consiste à créer un classe wrapper qui implémente Comparable interface.
ensuite dans le code du client, ajouter instance de CustomComparableBitSet en treeset.
Ok si vous avez des milliers de BitSet objets, la création de wrapper objets peut-être pas une bonne idée, car il va apporter une certaine surcharge de la mémoire. Comment sur étend la classe BitSet et implémente Comparable. public class CustomeComparableBitSet<T> étend BitSet implémente Comparable<T> { public int compareTo(T arg0) { int i = 0; // TODO changer je me suis basé sur votre logique de comparaison return i; } }
OriginalL'auteur spiritwalker