java de tri à l'aide de la classe anonyme
J'ai la classe dans laquelle je suis le tri d'une liste.
import java.util.*;
public class First
{
private static HashMap<String,Second> msgs;
public static void main(String[] args)
{
List<String> ls=new ArrayList<String>();
ls.add("fourth");
ls.add("2");
ls.add("second");
ls.add("first");
ls.add("third");
ls.add("1");
Iterator it=ls.iterator();
//before sorting
while(it.hasNext())
{
String s=(String)it.next();
System.out.println(s);
}
Collections.sort(ls, new Comparator(){
public int compare(Object o1, Object o2) {
return -1;
//it can also return 0, and 1
}
});
System.out.println(" ");
//after sorting
Iterator iti=ls.iterator();
while(iti.hasNext())
{
String s=(String)iti.next();
System.out.println(s);
}
}
}
Après l'exécution du programme, j'obtiens ces valeurs:
1
third
first
second
2
fourth
Ma question est quel est le comportement de la Collecte.fonction sort() ici. Sur le retour de -1 à partir de la fonction de comparaison, nous obtenons l'ordre inverse de la liste. Alors comment peut-on obtenir d'autres ordres de tri? Quel est le rôle du retour de 0 et de 1?
Que voulez-vous que la sortie ?
OriginalL'auteur Osman Khalid | 2012-05-20
Vous devez vous connecter pour publier un commentaire.
Enfin, j'ai modifié la fonction de tri de cette manière afin d'obtenir des données triées.
OriginalL'auteur Osman Khalid
Voici ce que la javadoc dit:
Votre comparateur de mise en œuvre ne respecte pas ce contrat, de sorte que le résultat est indéterminé. Elle doit retourner une valeur négative si elle estime o1 à moins de o2. Elle doit retourner une valeur positive si elle estime o1 être supérieure à o2. Et il doit retourner 0 si elle estime o1 être égale à o2. Et il doit bien sûr être compatible. Si o1 < o2, puis o2 > o1. Si o1 < o2 et o2 < o3, alors o1 < o3.
OriginalL'auteur JB Nizet
Vous pouvez utiliser la classe anonyme de cette façon:
OriginalL'auteur Saurabh
java.util.Comparator
classe dit danscompare
méthode java doc:vous pouvez utiliser le code suivant:
Ce code doit fonctionner correctement.Vous pouvez modifier la méthode de comparaison pour plus de flexibilité.
compareTo
méthode dansString
classe dit dans son langage de programmation java doc:OriginalL'auteur Sam
C'est-à-dire que le s1 est égal à o2, ou o1 est supérieure à o2.
Votre anonyme comparateur actuellement dit que o1 est à moins de o2, pour chaque valeur possible de
o1
eto2
. Cela fait tout simplement pas de sens, et à l'origine du comportement desort
d'être imprévisible.Un valide comparateur doit mettre en œuvre les
compare(Object, Object)
méthode afin qu'elle se comporte selon les exigences de laComparator
interface.Si votre objectif est d'inverser l'ordre des éléments dans une liste, puis ne pas utiliser
sort
. UtilisationCollections.reverse()
OriginalL'auteur Stephen C
de Javadoc de Comparateur
Afin de définir les fonctionnalités de l'inférieur,égal ou supérieur à votre classe ,il vous manque de l'égalité et plus de fonctionnalités.
OriginalL'auteur Balaswamy Vaddeman