Comment utiliser l'interface Comparator
Je suis nouveau sur java, et je ne suis pas vraiment comment utiliser le comparateur d'interface.
J'ai un ArrayList
de Item
s dans un Inventory
classe et une Item
classe.
Dans le Item
classe, j'ai écrit:
public class Item implements Comparator<Item> {
//stuff
...
@Override
public int compare(Item a, Item b) {
if (a.getID().compareToIgnoreCase(b.getID())>0)
return 1;
else if (a.getID().compareToIgnoreCase(b.getID())<0)
return -1;
else
return 0;
}
}
La getID() la méthode donne juste l'id, ce qui je dois utiliser pour classer par ordre alphabétique les éléments.
Je ne suis pas sûr si cela est vrai, il m'a fait mettre le @Override
annotation, je ne sais pas pourquoi. Aussi, j'ai écrit une interface qui dit simplement:
public interface Comparator<Item>
{
int compare(Item a, Item b);
}
Je ne suis pas sûr que peu. Aussi comment puis-je mettre en œuvre cette méthode pour trier la liste de tableaux créés dans l'inventaire de la classe?
Merci, si ma question n'a pas de sens ou besoins de précisions dites le moi.
source d'informationauteur bassandguitar
Vous devez vous connecter pour publier un commentaire.
D'utiliser le Comparateur interface que vous avez à mettre en œuvre et de le passer comme une classe anonyme pour Les Collections.de tri(Liste de liste, Comparateur c) comme second paramètre.
Si vous souhaitez passer uniquement la liste de Les Collections.de tri(Liste) alors votre
Item
de classe a pour la mettre en œuvre Comparable interface.Dans les deux cas, la
Collections.sort
méthodes de savoir comment commander les éléments de votre listevoici un exemple de code:
Classe d'élément de la mise en œuvre de
Comparable
+ Inventaire de la tenue d'une liste d'élémentsSortie
EDIT: tout d'Abord, un certain nombre de choses:
@Override
annotation ne devrait pas être obligatoire. Si Eclipse veut que vous le mettez sur, ne vous inquiétez pas.import java.util.Comparator;
tout en haut de votre code (avant lepublic class
stuff) pour a) l'utilisation de la version donnée par Java et b) de rendre votre code compatible avec à peu près tout ce qui existe dans le monde.Le Comparateur interface n'est pas utilisé pour créer une classe qui peut se mettre en ordre. C'est l'interface Comparable.
Les deux sont similaires, donc je vais décrire ici.
java.util.Comparateur de
Le Comparateur interface, comme vous le savez déjà, a une méthode:
compare
. Comparateur générique (utilise les crochets<>
) et prend le type il le compare à l'intérieur de la<>
. Le truc, c'est que les Comparateurs sont utilisés pour comparer des éléments de autres classes. Par exemple, je pourrais créer un Comparateur pourjava.lang.Integers
qui renvoie l'inverse de "l'ordre naturel" (comment les Entiers sont généralement commandés).Comparateurs sont principalement utilisés pour le donner à d'autres objets d'une façon pour le tri de leurs paramètres lorsqu'ils ne sont pas dans l'ordre naturel. Par exemple, le
java.util.TreeSet
de la classe prend un Comparateur pour sa capacité de tri.java.lang.Comparable
Comparable but est-à-dire qu'un objet peut être comparé. Il est aussi générique et prend le type qu'il peut être comparé. Par exemple, un
Comparable<String>
peut être comparé à Cordes.Comparable a une méthode:
compareTo()
. À la différence du Comparateurcompare()
compareTo
prend un paramètre. Il fonctionne commecompare
sauf qu'il utilise l'invocation d'objet comme paramètre. Donc,comparableA.compareTo(comparableB)
est le même quecomparator.compare(comparableA, comparableB)
.Comparables pour la plupart établit l'ordre naturel pour les objets, et est la valeur par défaut de façon à comparer des objets. Comparateur rôle est de remplacer cet ordre naturel lorsque l'on a des besoins différents en matière de comparaison de données ou de tri.
Liste De Tableaux De Tri
Pour trier un
List
vous pouvez utiliser la méthode d'ores et déjà disponible: faites défiler vers le bas poursort
sur lejava.util.Collections
de la classe. Une méthode prend un traitement de référence, l'autre ne l'est pas.sort
est statique; l'utilisationCollections.sort(...)
pasCollections c = new Collections(); c.sort(...)
. (Collections
n'a même pas un constructeur de toute façon, donc meh.)Vous mélangez les interfaces
Comparator
etComparable
.Comparateur: http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html
Comparables: http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html
Le but de la Comparaison est une classe déclarée de manière anonyme sur le spot ou autre) qui peuvent être transmises à une opération qui a besoin d'une commande, et il définit le genre qui sera utilisé sur l'élément. Comparateur est utilisé en DEHORS de la classe qui a besoin de tri, si il ya une autre façon que vous souhaitez trier par.
Le but de Comparable est-à-dire que la classe qui implémente Comparable) a un ordre naturel - et c'est ce qu'il est. Si votre classe qui a besoin de tri a un ordre naturel, puis le définir comme Comparables. (Une classe qui implémente Comparable, de l'ordre de tri peut toujours être remplacé par un Comparateur. D'autre part, si la classe n'est pas Comparable également que le passage d'un groupe de Comparaison est obligatoire pour passer commande pour être possible.)
Vous avez mis en œuvre la mauvaise interface, vous voulez Comparable
Utilisation de @Override annotation est une pratique courante dans les éditeurs comme eclipse, netbeans pour l'informer développeur qu'il est primordial/la mise en œuvre de parent de la classe/méthode de l'interface. Il est facultatif.
Ne pas implémenter cette interface dans votre classe de l'Élément. Créer un nouveau de la classe et de mettre en œuvre la
Comparator
interface.Et puis, dans votre classe principale, de ce faire: