Carte Ordonnée Java


En Java, existe-t-il un objet qui agit comme une carte pour stocker et accéder aux paires clé/valeur, mais peut renvoyer une liste ordonnée de clés et une liste ordonnée de valeurs, de sorte que les listes de clés et de valeurs soient dans le même ordre?

Donc, comme explication par code, je cherche quelque chose qui se comporte comme mon OrderedMap fictif:

OrderedMap<Integer, String> om = new OrderedMap<>();
om.put(0, "Zero");
om.put(7, "Seven");

String o = om.get(7); // o is "Seven"
List<Integer> keys = om.getKeys();
List<String> values = om.getValues();

for(int i = 0; i < keys.size(); i++)
{
    Integer key = keys.get(i);
    String value = values.get(i);
    Assert(om.get(key) == value);
}
Author: Jasper, 2009-03-19

7 answers

L'interface SortedMap (avec l'implémentation TreeMap) devrait être votre ami.

L'interface a les méthodes:

  • keySet() qui renvoie à un ensemble de touches dans l'ordre croissant
  • values() qui renvoie une collection de toutes les valeurs dans l'ordre croissant des clés correspondantes

Cette interface répond donc exactement à vos besoins. Cependant, les clés doivent avoir un ordre significatif. Sinon, vous pouvez utilisé le LinkedHashMap où l'ordre est déterminé par l'ordre d'insertion.

 328
Author: dmeister, 2016-10-14 21:28:22

Existe-t-il un objet qui agit comme une carte pour stocker et accéder aux paires clé/valeur, mais peut renvoyer une liste ordonnée de clés et une liste ordonnée de valeurs, de sorte que les listes clé et valeur soient dans le même ordre?

Vous cherchez java.util.LinkedHashMap. Vous obtiendrez une liste de Carte.Entrée paires, qui sont toujours itérées dans le même ordre. Cet ordre est le même que l'ordre par lequel vous mettez les articles. Alternativement, utilisez le java.util.SortedMap, où les clés doivent avoir un ordre naturel ou l'avoir spécifié par un Comparator.

 175
Author: John Feminella, 2009-03-19 18:23:31

LinkedHashMap maintient l'ordre des clés.

Java.util.LinkedHashMap semble fonctionner comme un HashMap normal sinon.

 15
Author: VoNWooDSoN, 2015-01-05 22:35:18

Je pense que la collection la plus proche que vous obtiendrez du framework est le SortedMap

 6
Author: bruno conde, 2009-03-19 18:16:34

Je pense que l'interface SortedMap applique ce que vous demandez et TreeMap l'implémente.

Http://java.sun.com/j2se/1.5.0/docs/api/java/util/SortedMap.html http://java.sun.com/j2se/1.5.0/docs/api/java/util/TreeMap.html

 3
Author: CJ F, 2009-03-19 18:21:05

Depuis Java 6, il existe également une alternative thread-safe non bloquante à TreeMap. Voir ConcurrentSkipListMap .

 3
Author: Vadzim, 2012-06-06 12:10:27

Vous pouvez tirer parti de l'interface NavigableMap qui peut être accédée et parcourue dans l'ordre croissant ou décroissant des clés. Cette interface est destinée à remplacer l'interface SortedMap. La carte Navigable est généralement triée selon l'ordre naturel de ses clés, ou par un Comparateur fourni au moment de la création de la carte.

Il en existe trois implémentations les plus utiles: TreeMap, ImmutableSortedMap et ConcurrentSkipListMap.

Exemple de carte arborescente:

TreeMap<String, Integer> users = new TreeMap<String, Integer>();
users.put("Bob", 1);
users.put("Alice", 2);
users.put("John", 3);

for (String key: users.keySet()) {
  System.out.println(key + " (ID = "+ users.get(key) + ")");
}

Sortie:

Alice (ID = 2)
Bob (ID = 1)
John (ID = 3)
 3
Author: Vitalii Fedorenko, 2014-06-22 22:05:02