web-dev-qa-db-fra.com

Comment utiliser l'interface SortedMap en Java?

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().

62
Bick

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.

82
Barth

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.

42
Tom Jefferys

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/

13
CrazyCoder

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>();
3
Thilo

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.

2
Mister Smith