java: TreeSet ordre
Avec ce code j'obtiens ce résultat:
TreeSet<String> t=new TreeSet<String>();
t.add("test 15");
t.add("dfd 2");
t.add("ersfd 20");
t.add("asdt 10");
Iterator<String> it=t.iterator();
while(it.hasNext()){
System.out.println(it.next);
}
J'obtiens:
asdt 10
dfd 2
ersfd 20
test 15
Comment puis-je obtenir une ordonnance de ce type, basé sur les chiffres, avec TreeSet?
dfd 2
asdt 10
test 15
ersfd 20
utiliser un comparateur.
Au lieu d'avoir des valeurs comme "dfd 2" dans une chaîne de caractères. Il serait mieux si vous l'avez dans les 2 champs distincts en un objet java (par exemple YourObject). TreeSet<YourObject> t=new TreeSet<YourObject>();
Au lieu d'avoir des valeurs comme "dfd 2" dans une chaîne de caractères. Il serait mieux si vous l'avez dans les 2 champs distincts en un objet java (par exemple YourObject). TreeSet<YourObject> t=new TreeSet<YourObject>();
OriginalL'auteur Enzo | 2014-04-29
Vous devez vous connecter pour publier un commentaire.
Le TreeSet mise en œuvre est le tri par l'ordre lexicographique de la chaîne de valeurs à insérer. Si vous souhaitez trier par la valeur de l'entier, alors vous aurez besoin de faire comme ces et d'autres ont suggéré de créer un nouvel objet et de redéfinir la méthode compareTo, ou utiliser votre propre comparateur.
ou
Juste pour vérifier la signature des méthodes. 🙂
sur
equals
, il ne devrait pas remplacer l'Objet est égal à?Je vois ce que vous dites. Vous pouvez également remplacer l'Objet.equals(Object autres) la méthode et délégué à la méthode equals ci-dessus si c'est le bon type. De toute façon vous êtes coincé à la vérification de type.
OriginalL'auteur jgitter
Vous pouvez utiliser l'un des
TreeSet
constructeurs: http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#TreeSet%28java.util.Comparator%29Cela vous permet d'avoir votre propre comparateur qui vous permet d'organiser les entrées dans le Jeu comme vous le souhaitez.
Mettre en œuvre un
Comparator
qui extrait le numéro de laString
puis trie par le nombre premier, seulement pour retomber à unString
la comparaison, si les deux nombres sont égaux.OriginalL'auteur Tim B
Utiliser le TreeSet constructeur qui reçoit une coutume de Comparaison, et de mettre en œuvre un Comparateur qui trie la chaîne différemment.
Voici un exemple (non testé, vérifiez le code avant de l'utiliser):
String
comparaison "20" vient avant "4". Il a besoin d'extraire le nombre et faire une comparaison numérique.Vous avez raison bien sûr, j'ai ajouté le correctif.
Yep, ça va fonctionner. Bien que je classerais comme "fragile" code que si le format des chaînes de changements, même légèrement, il pourrait causer des NumberFormatExceptions commence à être jetés. Que peut-être bien dans ce cas, mais il dépend de la façon dont contraint les données d'entrée.
OriginalL'auteur eitanfar
Essayez ceci:
Ce code ne compile pas/travail. Il n'y a pas de méthode
parse()
pour la classeInteger
, et la>
opérateur retourneboolean
, pasint
.Je voudrais lancer une exception comme ArrayIndexOutOfBoundsException ... hé le code déjà jeter. ;D
OriginalL'auteur Peter Rader
OriginalL'auteur Afsar_Abbas