¿Clase Java que implementa Map y mantiene el orden de inserción?



Answers

Si un mapa inmutable se adapta a tus necesidades, entonces hay una biblioteca de google llamada guava (consulta también preguntas de guayaba )

guava proporciona una ImmutableMap con un orden de iteración confiable especificado por el usuario. Este ImmutableMap tiene un rendimiento O (1) para containsKey, get. Obviamente poner y eliminar no son compatibles.

ImmutableMap objetos ImmutableMap se construyen utilizando los elegantes métodos of() conveniencia estática of() y copyOf() o un objeto Builder .

Question

Estoy buscando una clase en Java que tenga asociación de clave-valor, pero sin usar hash. Esto es lo que estoy haciendo actualmente:

  1. Agregue valores a una Hashtable .
  2. Obtenga un iterador para Hashtable.entrySet() .
  3. Itera a través de todos los valores y:
    1. Obtener un Map.Entry para el iterador.
    2. Cree un objeto de tipo Module (una clase personalizada) basado en el valor.
    3. Agregue la clase a un JPanel.
  4. Mostrar el panel

El problema con esto es que no tengo control sobre el orden en que recupero los valores, por lo que no puedo mostrar los valores en el orden dado (sin codificar el orden).

Yo usaría un ArrayList o Vector para esto, pero más adelante en el código necesito tomar el objeto Module para una Clave dada, lo que no puedo hacer con ArrayList o Vector .

¿Alguien sabe de una clase Java libre / de código abierto que hará esto, o una forma de obtener valores de una Hashtable función de cuándo se agregaron?

¡Gracias!







LinkedHashMap devolverá los elementos en el orden en que se insertaron en el mapa cuando itere sobre keySet (), entrySet () o values ​​() del mapa.

Map<String, String> map = new LinkedHashMap<String, String>();

map.put("id", "1");
map.put("name", "rohan");
map.put("age", "26");

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

Esto imprimirá los elementos en el orden en que se colocaron en el mapa:

id = 1
name = rohan 
age = 26 



Puede usar LinkedHashMap para el orden de inserción principal en Mapa

Los puntos importantes acerca de la clase Java LinkedHashMap son:

  1. Contiene solo elementos únicos.
  2. Un LinkedHashMap contiene valores basados ​​en la clave 3. Puede tener una clave nula y múltiples valores nulos. 4. Es lo mismo que HashMap en cambio mantiene el orden de inserción

la clase pública LinkedHashMap extiende HashMap implementa Map

Pero si desea ordenar los valores en el mapa utilizando un objeto definido por el usuario o cualquier clave de tipo de datos primitivo, entonces debe usar TreeMap. Para obtener más información, consulte este enlace EXplaination




Related