Ce n'est pas mon vrai code que je viens de simuler afin de comprendre quoi faire ensuite.
J'ai une personne de classe avec des propriétés Âge, poids de la hauteur.
Maintenant dans mon groupe de classe
Je crée deux quatre objets
rollCall.put(programmer, 1); rollCall.put(clerk, 2); rollCall.put(student, 1); rollCall.put(tech, 3);
5 Réponses :
Tout d'abord, Le Treemap code> Tries sur les touches et non des valeurs. Donc, cela fonctionne déjà en votre faveur. Tout objet que vous utilisez comme une clé dans un
Treemap code> doit em> Implément
comparable code> ou vous devez fournir un comparateur
code> en tant que Argument de constructeur. Tout ce que vous avez à faire est d'avoir votre
comparèteo () code> méthode (à partir de
comparable code>) ou
comparer () code> méthode (à partir de
comparateur Code>) Comparez basé sur votre
getage () code> Propriété. P>
treemap code> constructeur qui prend un comparateur
code> est décrit ici. Le comparateur
code> sera utilisé pour trier les touches de la carte. < / p>
Je ne suis pas disposé à gâcher avec la classe de ma personne. Dans ce cas, je dois créer une nouvelle classe de compréhension et utiliser la méthode de comparaison (objet O1, objet O2). Mais le problème ici est que Compator fonctionne uniquement avec des collections et non des cartes ?? Existe-t-il un moyen d'utiliser Comprator pour Treemap? n'importe quel exemple?
J'ai ajouté un lien vers le constructeur que j'ai mentionné à ma réponse ci-dessus. Ce constructeur prend un comparateur code> comme argument et l'utilise pour comparer les touches.
Vous devez être capable de comparer les objets de votre personne. S'il y a une façon canonique de les comparer, laissez-les mettre en œuvre Si cela est fait, vous pouvez utiliser les personnes comme touches pour une sorte de type (comme Treemap). P>
S'il y a plusieurs façons, deux personnes pourraient être comparées, implémenter un comparateur Ensuite, donnez ce comparateur au tri de la construction. P>
Cela ne triera pas votre hashmap (un hashmap a toujours un ordre apparemment aléatoire), mais vous donnera une autre forme de données triée à la place. P> comparable
comparèteo (personne) code> méthode. P>
import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; /* * Sort HashMap that contains Student object */ public class SortHashMap implements Comparator<Student> { public static void main(String[] args) { Map map = new HashMap(); map.put("s1", new Student(5,"utpal")); map.put("s2", new Student(4,"ramesh")); map.put("s3", new Student(10,"tushar")); map.put("s4", new Student(2,"anindya")); Collection<Student> students = map.values(); List list = new ArrayList(students); Collections.sort(list,new SortHashMap()); for (Iterator it = list.iterator(); it.hasNext();) { Student stdn = (Student)it.next(); System.out.println("Student id : "+stdn.id); System.out.println("Student Name : "+stdn.name); } } @Override public int compare(Student s1, Student s2) { return s1.name.compareTo(s2.name); } } class Student { int id; String name; Student(int id,String name) { this.id = id; this.name = name; } }
Vous pouvez obtenir une carte lorsque vous ajoutez des personnes à la collection qu'ils seront insérées dans l'ordre par âge. p> p>
import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; public class PersonSort { private MySort sort = new MySort(); private Map<Person, String> map = new HashMap<Person, String> (); private Map<Person, String> treeMap = new TreeMap<Person, String>(sort); Person e1 = new Person(500, "Saurabh"); Person e2 = new Person(400, "Kishan"); Person e3 = new Person(900, "Ashwini"); public void myMap() { map.put(e3, "Ash"); map.put(e2, "Krish"); map.put(e1, "Sau"); Iterator it = map.keySet().iterator(); System.out.println("UnSorted Map"); while(it.hasNext()) { System.out.println(map.get(it.next())); } treeMap.putAll(map); System.out.println("SortedMap"); Iterator it1 = treeMap.keySet().iterator(); while(it1.hasNext()) { System.out.println(treeMap.get(it1.next())); } } public static void main(String[] args) { PersonSort es = new PersonSort(); es.myMap(); } } class Person { Person(int id, String name) { this.id = id; this.name = name; } private int id; private String name; //Getters and Setters } class MySort implements Comparator<Object> { public int compare(Object o1, Object o2) { return ((Person) o1).getId() - ((Person)o2).getId(); } }
Regardez ici: Stackoverflow.com/Questtions/109383/...
Il n'y a pas de moyen facile J'ai peur. Regardez le lien de la surbose ci-dessus. (Je pense que certaines des réponses ci-dessous supposent que vous souhaitez trier sur les touches (
personne code>).)
oui je veux trier sur les clés non valeurs
Comment puis-je le trier pour la carte. J'ai un problème similaire à cela, mais j'ai besoin de trier des valeurs.