java - ordenado - Cómo mantener el orden de inserción utilizando colecciones
los secretos del orden la limpieza en tu casa (3)
Quiero agregar una clave, un par de valores en una tabla hash (o cualquier otra colección), pero tengo que mantener el orden de inserción. ¿Cómo puedo hacer esto?
Como agregaré 1 como clave "uno" como valor, 2 como clave y "dos" como valor.
La salida debe ordenarse como:
1:one
2:two
Estas son las diferencias características de algunas implementaciones de Map
importantes:
-
LinkedHashMap
: "con orden de iteración predecible [...] que normalmente es el orden en el que se insertaron las claves en el mapa ( orden de inserción )". -
HashMap
: "no garantiza el orden del mapa" -
TreeMap
: "se clasifica según el orden natural de sus claves, o por unComparator
"- es decir, es un
SortedMap
- es decir, es un
Entonces, parece que LinkedHashMap
es lo que necesita en este caso.
Aquí hay un fragmento para ilustrar las diferencias; también muestra una forma común de iterar sobre todas las entradas de un Map
, y cómo el uso de una interfaz para referirse a objetos permite una gran flexibilidad de elección de implementación.
import java.util.*;
public class MapExample {
public static void main(String[] args) {
populateThenDump(new HashMap<String,Integer>());
populateThenDump(new TreeMap<String,Integer>());
populateThenDump(new LinkedHashMap<String,Integer>());
}
static void populateThenDump(Map<String,Integer> map) {
System.out.println(map.getClass().getName());
map.put("Zero", 0);
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
map.put("Four", 4);
for (Map.Entry<String,Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
}
}
El resultado del fragmento anterior es ( como se ve en ideone.com ):
java.util.HashMap // unordered, results may vary
Three => 3
Zero => 0
One => 1
Four => 4
Two => 2
java.util.TreeMap // ordered by String keys lexicographically
Four => 4
One => 1
Three => 3
Two => 2
Zero => 0
java.util.LinkedHashMap // insertion order
Zero => 0
One => 1
Two => 2
Three => 3
Four => 4
Preguntas relacionadas
- Iterar sobre el mapa
- iterar y eliminar de un mapa
- Si desea modificar el mapa mientras itera, deberá usar su
Iterator
.
- Si desea modificar el mapa mientras itera, deberá usar su
Preguntas similares
Para la tabla hash, use la clase LinkedHashMap
.
Su búsqueda termina en LinkedHashMap ..... :)