Cómo recuperar un elemento de HashMap por su posición, ¿es posible?¿Es posible obtener elemento de HashMap por su posición?
Respuesta
HashMaps no conservan el pedido:
Esta clase no ofrece ninguna garantía en cuanto a el orden del mapa; en particular, , no garantiza que la orden se mantenga constante en el tiempo.
Eche un vistazo a LinkedHashMap, que garantiza un orden de iteración predecible.
Esto realmente no responde la pregunta. Las otras respuestas a continuación son más útiles. – forresthopkinsa
Con respecto, esto cita documentación que * directamente * responde a la pregunta –
Incluso si el pedido no es constante en el tiempo, aún podría ser posible recuperar uno de los miembros en una posición determinada. – Beginner
Uso LinkedHashMap
:
tabla hash y lista enlazada implementación de la interfaz del mapa, con orden de iteración predecible. Esta implementación difiere de HashMap en que mantiene una lista doblemente enlazada que se ejecuta a través de todas sus entradas.
HashMap - y la estructura de datos subyacente - tablas hash, no tienen una noción de posición. A diferencia de LinkedList o Vector, la clave de entrada se transforma en un 'cubo' donde se almacena el valor. Estos depósitos no están ordenados de manera que tengan sentido fuera de la interfaz HashMap y, como tales, los elementos que coloca en HashMap no están en orden en el sentido que esperaría con las otras estructuras de datos
HashMap no tiene ningún concepto de posición por lo que no hay forma de obtener un objeto por posición. Los objetos en Maps están configurados y obtienen por las teclas.
Asumo por 'posición' que se refiere al orden en el que ha insertado los elementos en el HashMap. En ese caso, quiere usar un LinkedHashMap. Sin embargo, LinkedHashMap no ofrece un método de acceso; tendrá que escribir una como
public Object getElementAt(LinkedHashMap map, int index) {
for (Map.Entry entry : map.entrySet()) {
if (index-- == 0) {
return entry.value();
}
}
return null;
}
HashMaps no permiten el acceso de la posición, que sólo conoce el código hash y y se puede recuperar el valor si se puede calcular el código hash de la clave. TreeMaps tiene una idea de ordenar. Los mapas de Linkedhas conservan el orden en que ingresaron al mapa.
Use un LinkedHashMap y cuando necesite recuperar por posición, convierta los valores en ArrayList.
LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap<String,String>();
/* Populate */
linkedHashMap.put("key0","value0");
linkedHashMap.put("key1","value1");
linkedHashMap.put("key2","value2");
/* Get by position */
int pos = 1;
String value = (new ArrayList<String>(linkedHashMap.values())).get(pos);
¿Siempre se necesita crear una copia de las claves de HashMap? – Richard
Use LinkedHashMap y use esta función.
private LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
Define así y.
private Entry getEntry(int id){
Iterator iterator = map.entrySet().iterator();
int n = 0;
while(iterator.hasNext()){
Entry entry = (Entry) iterator.next();
if(n == id){
return entry;
}
n ++;
}
return null;
}
La función puede devolver la entrada seleccionada.
Si desea mantener el orden en el que agregó los elementos al mapa, use LinkedHashMap
en lugar de solo HashMap
.
Aquí es un enfoque que le permitirá obtener un valor por su índice en el mapa:
public Object getElementByIndex(LinkedHashMap map,int index){
return map.get((map.keySet().toArray())[ index ]);
}
Lo más simple que debo decir ... En lugar de convertirlo todo, solo está usando el conjunto de claves. Excelente – kirtan403
Usted puede tratar de poner en práctica algo por el estilo, mira:
Map<String, Integer> map = new LinkedHashMap<String, Integer>();
map.put("juan", 2);
map.put("pedro", 3);
map.put("pablo", 5);
map.put("iphoncio",9)
List<String> indexes = new ArrayList<String>(map.keySet()); // <== Parse
System.out.println(indexes.indexOf("juan")); // ==> 0
System.out.println(indexes.indexOf("iphoncio")); // ==> 3
I Espero que esto funcione para usted.
Otro enfoque de trabajo consiste en transformar los valores del mapa en una matriz y luego recuperar el elemento en el índice. prueba de funcionamiento de 100 000 elementos por búsquedas de índice en LinkedHashMap de 100 000 objetos utilizando siguientes enfoques dio lugar a los siguientes resultados:
//My answer:
public Particle getElementByIndex(LinkedHashMap<Point, Particle> map,int index){
return map.values().toArray(new Particle[map.values().size()])[index];
} //68 965 ms
//Syd Lambert's answer:
public Particle getElementByIndex(LinkedHashMap<Point, Particle> map,int index){
return map.get((map.keySet().toArray())[ index ]);
} //80 700 ms
Con todo elemento de recuperación por el índice de LinkedHashMap parece ser bastante pesado operación.
Si, por alguna razón, tiene que pegarse con el HashMap, puede convertir el conjunto de claves de una matriz y el índice de las claves de la matriz para obtener los valores en el mapa de este modo:
Object[] keys = map.keySet().toArray();
A continuación, puede acceder al mapa como:
map.get(keys[i]);
Tenga en cuenta que arr [i] debería cambiarse por: keys [i] –
- 1. Obtener la distancia del elemento relativo a su elemento padre
- 2. ¿Cómo obtener un elemento por su href en jquery?
- 3. ¿Es posible crear una cola para el conjunto de HashMap?
- 4. ¿Cómo obtener la posición superior de un elemento?
- 5. ¿Es posible tener un elemento hijo detrás de su elemento primario con z-index
- 6. ¿Cómo obtener la posición() de un elemento XElement?
- 7. Cómo obtener la posición del elemento transformado con css rota
- 8. Javascript: obtener la posición del mouse relativo al elemento principal
- 9. Obtener la posición del texto dentro de un elemento
- 10. ¿Es posible cambiar el nombre de una clave Hashmap?
- 11. ¿Es posible eliminar el elemento de cola por valor?
- 12. GridView: Obtener una vista por posición
- 13. ¿Por qué usar un hashmap?
- 14. absoluta elemento posicionado de recorte si la posición fuera de su elemento padre IE7
- 15. ¿Es posible crear un HashMap que sea Parcelable en Android?
- 16. Obtener la posición inferior y derecho de un elemento
- 17. AutoCompleteTextView onItemHaga clic en la posición o ID del elemento usando HashMap
- 18. Encuentra la posición de un elemento dentro de su elemento primario con XSLT/XPath
- 19. Javascript - Obtener posición del elemento de la matriz
- 20. Java - Obtener posición del elemento en la matriz
- 21. cómo obtener valores hash por posición en ruby?
- 22. ¿Cómo obtener la posición de un elemento en un StackPanel?
- 23. ¿Es posible crear su configuración regional personalizada?
- 24. ¿Cómo obtener la posición de un elemento en UIWebView?
- 25. JavaScript llegar elemento por su nombre
- 26. Richfaces - Obtener elemento por Id
- 27. Java HashMap: ¿Cómo obtener una clave y valor por índice?
- 28. Obtener elemento por título jQuery
- 29. Java clase HashMap por valor
- 30. ¿Es posible establecer la posición de la imagen de UIImageView?
¿Qué quiere decir "posición"? Los HashMaps no están ordenados, por lo que no tienen la noción usual de "posición" que obtendría con algo parecido a un Vector. – Mat
¿Quiere decir por su orden de inserción u otro orden? –
@Mark: orden de inserción. – Eugene