Pregunta

Me preguntaba si existe una clase que implemente las interfaces Map y List en Java.

Tengo una estructura de datos que es principalmente un Map . Asigno cadenas (ID) a Image s. Pero en una parte específica de mi código, necesito presentar al usuario todas las Images disponibles. La única forma de hacerlo hasta ahora es escribir esto:

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

Por lo tanto, sería bueno tener una clase que implemente tanto Map como List para poder simplemente escribir:

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

¿Alguien sabe de tal implementación?

EDITAR : Después de ver las respuestas (que son correctas, votaron), ahora me doy cuenta de que también necesitaría que el mapa esté ordenado. Cuando digo "ordenado", todo lo que quiero decir es que me gustaría que tuviera los valores en un orden específico, uno que pudiera modificar. Sé que esta no es la pregunta original, pero me di cuenta de que la necesito.

EDIT 2 : Parece que soy indeciso. Lo que necesito es un mapa ordenado, no uno ordenado. Perdón por la confusión, gente.

¿Fue útil?

Solución

Si necesita sus artículos en un orden específico, LinkedHashMap es tu amigo: mantiene los elementos en orden de inserción. TreeMap mantendrá sus artículos en un orden definido por un Comparador que proporcione o un método compareTo de la clave.

Otros consejos

Para un mapa ordenado, mire el LinkedHashMap . Eso mantendrá sus claves en el orden de inserción.

Si utiliza un SortedMap mantendrá las claves ordenadas. (El TreeMap es la implementación más común.)

Lo que puede usar es map.entrySet () . Eso le permitirá iterar sobre el conjunto de entradas de mapa.

Consulte el javadoc para un poco más de información.

Ya tienes un montón de respuestas prácticas. Pero respondiendo directamente a la pregunta ...

  

Estaba deambulando si hay una clase que implementa las interfaces Map y List en Java.

... vale la pena mencionar que es simplemente imposible. El método remove (Object) es el obstáculo.

En la interfaz Map su firma es:

V remove(Object key);

Y en la interfaz List es:

boolean remove(Object o);

puede usar el < code> Map.values ??() , que devuelve una Collection .

Esto le brinda una colección de los valores almacenados

myMap.values()

Prueba esto:

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

Para ver el mapa ordenado, consulte java .util.SortedMap implementaciones. java.util.TreeMap es la opción más frecuente. Si solo necesita un orden de iteración garantizado, puede probar java.util.LinkedHashMap . Ofrece iteración en el mismo orden en que coloca elementos en el mapa. O, opcionalmente, en el último orden de acceso. Si desea mover la clave (una vez agregada) al final del mapa, debe eliminarla explícitamente y volver a colocarla.

puede usar un TreeMap se ordena de acuerdo con el orden natural de sus claves, o por un comparador proporcionado en el momento de la creación del mapa:

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

donde ByNameComparator () es un comparador. Alternativamente, puede usar los valores () methond y ordenar usando Collections.sort ():

Collection<Image> images = mapByName.values();
Collections.sort(images, new BySizeComparator());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top