J'ai un
Map<Float, MyObject>
Quel est le meilleur moyen de garder la carte triée en fonction du flottant?
Est-ce que SortedMap
est la meilleure réponse? TreeMap
? Comment puis-je l'utiliser?
Je crée la carte une seule fois et remplace le MyObject
en utilisant fréquemment myMap.put()
et myMap.get()
.
Je voudrais utiliser TreeMap
, qui implémente SortedMap
. Il est conçu exactement pour cela.
Exemple:
Map<Integer, String> map = new TreeMap<Integer, String>();
// Add Items to the TreeMap
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");
// Iterate over them
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
Voir le page de tutoriel Java pour SortedMap .
Et ici une liste de tutoriels liés à TreeMap.
Une TreeMap est probablement la manière la plus simple de le faire. Vous l'utilisez exactement comme une carte normale.
c'est à dire
Map<Float,String> mySortedMap = new TreeMap<Float,MyObject>();
// Put some values in it
mySortedMap.put(1.0f,"One");
mySortedMap.put(0.0f,"Zero");
mySortedMap.put(3.0f,"Three");
// Iterate through it and it'll be in order!
for(Map.Entry<Float,String> entry : mySortedMap.entrySet()) {
System.out.println(entry.getValue());
} // outputs Zero One Three
Cela vaut la peine de jeter un coup d’œil aux documents de l’API, http://download.Oracle.com/javase/6/docs/api/Java/util/TreeMap.html pour voir ce que vous pouvez faire d’autre avec il.
Vous pouvez utiliser TreeMap qui implémente en interne le SortedMap ci-dessous est l'exemple
Tri par ordre croissant:
Map<Float, String> ascsortedMAP = new TreeMap<Float, String>();
ascsortedMAP.put(8f, "name8");
ascsortedMAP.put(5f, "name5");
ascsortedMAP.put(15f, "name15");
ascsortedMAP.put(35f, "name35");
ascsortedMAP.put(44f, "name44");
ascsortedMAP.put(7f, "name7");
ascsortedMAP.put(6f, "name6");
for (Entry<Float, String> mapData : ascsortedMAP.entrySet()) {
System.out.println("Key : " + mapData.getKey() + "Value : " + mapData.getValue());
}
Tri par ordre décroissant:
Si vous souhaitez toujours que la carte soit utilisée par ordre décroissant en général, si vous n'en avez besoin qu'une seule fois, créez une TreeMap avec un ordre décroissant et insérez toutes les données de la carte d'origine.
// Create the map and provide the comparator as a argument
Map<Float, String> dscsortedMAP = new TreeMap<Float, String>(new Comparator<Float>() {
@Override
public int compare(Float o1, Float o2) {
return o2.compareTo(o1);
}
});
dscsortedMAP.putAll(ascsortedMAP);
pour plus d'informations sur SortedMAP, lisez http://examples.javacodegeeks.com/core-Java/util/treemap/Java-sorted-map-example/
TreeMap, qui est une implémentation de l'interface SortedMap, pourrait fonctionner.
Comment puis-je l'utiliser?
Map<Float, MyObject> map = new TreeMap<Float, MyObject>();
TreeMap
trie par ordre naturel. Les clés doivent implémenter Comparable
ou être compatibles avec un Comparator
(si vous avez passé une instance au constructeur). Dans votre cas, Float
implémente déjà Comparable
afin que vous n'ayez rien de spécial à faire.
Vous pouvez appeler keySet
pour récupérer toutes les clés par ordre croissant.