Question

Je me demandais s'il existait une classe implémentant les interfaces Map et List en Java.

J'ai une structure de données qui est principalement une carte . Je mappe des chaînes (identifiants) sur des images . Mais dans une partie spécifique de mon code, je dois présenter à l'utilisateur tous les images disponibles. Jusqu'à présent, la seule façon de le faire est d'écrire ceci:

for (String id : myMap.keySet()) {
    // get the image like this "myMap.get(id)" 
}

Il serait donc intéressant de disposer d'une classe implémentant à la fois Map et List afin que je puisse simplement écrire:

for (Image img : myMap) {
  // the image is img
}

Quelqu'un est-il au courant d'une telle implémentation?

MODIFIER : après avoir consulté les réponses (qui sont toutes correctes, votées), je me rends compte maintenant qu'il faudrait également que la carte soit triée. Lorsque je dis "trié", je veux simplement dire que je souhaite que les valeurs soient classées dans un ordre spécifique, que je pourrais modifier. Je sais que ce n’est pas la question de départ, mais je viens de comprendre que j’en ai besoin.

EDIT 2 : Il semble que je sois indécis. Ce dont j'ai besoin, c'est une carte ordonnée, pas une carte triée. Désolé pour la confusion, les gens.

Était-ce utile?

La solution

Si vous avez besoin de vos articles dans un ordre spécifique, LinkedHashMap est votre ami - il conserve les éléments dans l'ordre d'insertion. TreeMap conservera vos éléments dans un ordre défini soit par un comparateur que vous donnez, soit par une méthode compareTo de la clé.

Autres conseils

Pour obtenir une carte ordonnée, consultez le LinkedHashMap . Cela gardera vos clés dans l'ordre d'insertion.

Si vous utilisez un SortedMap , les touches sont conservées dans l’ordre trié. ( TreeMap est l’implémentation la plus courante.)

Vous pouvez utiliser map.entrySet () . Cela vous permettra de parcourir l'ensemble de MapEntries.

Découvrez le javadoc pour un peu plus d'infos.

Vous avez déjà un tas de réponses pratiques. Mais répondant directement à la question ...

  

Je me demandais s'il existe une classe qui implémente les interfaces Map et List en Java.

... cela vaut la peine de mentionner que c'est tout simplement impossible. La méthode remove (Object) est l’obstacle.

Dans l'interface Map , sa signature est:

V remove(Object key);

Et dans l'interface List , il s'agit de:

boolean remove(Object o);

vous pouvez utiliser le < code> Map.values ??() , qui retourne une Collection .

Ceci vous donne une collection des valeurs stockées

myMap.values()

Essayez ceci:

for (Image img : myMap.values()) {
    // the image is img
}

Pour une carte triée, consultez java .util.SortedMap . java.util.TreeMap est le choix le plus souvent. Si vous avez besoin d'un ordre d'itération garanti, vous pouvez essayer java.util.LinkedHashMap . Il propose l'itération dans le même ordre que vous mettez des éléments sur la carte. Ou, éventuellement, dans le dernier ordre d'accès. Si vous souhaitez déplacer la clé (une fois ajoutée) à la fin de la carte, vous devez explicitement la supprimer et la replacer.

vous pouvez utiliser une TreeMap . il est trié selon l'ordre naturel de ses clés ou par un comparateur fourni au moment de la création de la carte:

TreeMap<String, Image> mapByName = new TreeMap<String, Image>(new ByNameComparator());

où ByNameComparator () est un comparateur. Vous pouvez également utiliser les méthodes values ??(), methond et trier à l'aide de Collections.sort ():

Collection<Image> images = mapByName.values();
Collections.sort(images, new BySizeComparator());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top