Al mirar el código fuente de LinkedHashMaps de Sun, veo que hay una clase privada llamada KeyIterator, me gustaría usar esto. ¿Cómo puedo obtener acceso?¿Cómo obtengo un keyIterator para un LinkedHashMap?
Respuesta
usted lo consigue llamando
myMap.keySet().iterator();
Ni siquiera debería tener que saber que existe; es solo un artefacto de la implementación. Por lo que sé, podrían estar usando monos voladores para iterar las teclas; siempre y cuando se iteren según la especificación, no importa cómo lo hagan.
Por cierto, ¿sabía usted que HashMap
tiene una clase privada llamada KeyIterator
(al igual que ConcurrentHashMap
, ConcurrentSkipListMap
, EnumMap
, IdentityHashMap
, TreeMap
y WeakHashMap
)?
¿Eso hace una diferencia en cómo iterar a través de las teclas de HashMap
?
Editar: En respuesta a los su comentario, tenga en cuenta que si usted está tratando de iterar sobre todos los pares clave-valor en un Map
, hay una manera mejor que iterar sobre las claves y llamando get
para cada uno. El método entrySet()
obtiene un Set
de todos los pares clave-valor que luego puede iterar. Así que en lugar de escribir:
for (Key key : myMap.keySet()) {
Value val = myMap.get(key);
...
}
debe escribir:
for (Map.Entry<Key, Value> entry : myMap.entrySet()) {
doSomethingWithKey(entry.getKey());
doSomethingWithValue(entry.getValue());
...
}
También puede iterar sobre los valores con los values()
si lo desea.
Nota que desde keySet
, entrySet
y values
se definen en el Map
interface, que van a trabajar para cualquier Map
, no sólo LinkedHashMap
.
No debe usar nada que esté definido como parte de la implementación interna de LinkedHashMap (es decir, en el código fuente pero no está definido en la API). ¿Qué sucede si la implementación interna cambia en la próxima versión? Todo tu código lo usará se romperá.
las que debería escribir a la API y hacer algo como
myMap.keySet().iterator()
Es una clase privada, por lo que no se puede utilizar directamente.
private class KeyIterator extends LinkedHashIterator<K> {
Se devuelve una instancia cuando se utiliza el iterador normal.
myMap.keySet().iterator()
- 1. Implementando un LinkedHashMap concurrente
- 2. Equivalente para LinkedHashMap en Python
- 3. serialize/deserialize un LinkedHashMap (android) java
- 4. Ordenando LinkedHashMap
- 5. LinkedHashMap firma
- 6. ¿Cómo obtengo un estilo calculado?
- 7. Shrink LinkedHashMap en Java
- 8. ¿entrySet() en un LinkedHashMap también garantiza el orden?
- 9. LinkedHashMap en .NET
- 10. ¿Cómo obtengo RMagick para envolver imágenes alrededor de un cilindro?
- 11. ¿Cómo obtengo el nombre para mostrar de un objeto IdentityReference?
- 12. ¿Cómo obtengo que apache RewriteRule funcione correctamente para un subdominio?
- 13. ¿Cómo obtengo un ListBox horizontal para desplazarme horizontalmente en WP7?
- 14. ¿Cómo obtengo la lista de acciones disponibles para un controlador?
- 15. ¿Cómo obtengo un navegador web para actualizar automáticamente?
- 16. ¿Cómo obtengo Accurev para encontrar un espacio de trabajo movido?
- 17. ¿Cómo obtengo el objeto Método para un método?
- 18. ¿Cómo obtengo libvlc_media_player_get_time() para obtener un resultado más preciso?
- 19. En SQL, ¿cómo obtengo el valor máximo para un entero?
- 20. Cómo obtengo categorías para un producto en Magento
- 21. ¿Cómo obtengo Ruby 'puts' para escribir datos en un archivo?
- 22. ¿Cómo obtengo un token de usuario válido para CreateProcessAsUser?
- 23. ¿Cómo obtengo UIImage de un CGContextRef?
- 24. LinkedHashMap ¿LIFO o FIFO?
- 25. ¿Cómo obtengo los suscriptores de un evento?
- 26. ¿Cómo obtengo una NameTable de un XDocument?
- 27. ¿Cómo obtengo SvcConfigEditor.exe en un servidor?
- 28. ¿Cómo obtengo una imagen de un UIButton?
- 29. ¿Cómo obtengo un MethodInfo de ActionExecutingContext?
- 30. ¿Cómo obtengo cada línea de un NSString?
Simplemente no se me ocurrió que podía iterar sobre un LinkedHashMap hasta que vi la clase privada interna. Gracias por la respuesta sin embargo. –
No sabía para qué uso es entrySet() de. Pero, es realmente útil en casi todos los lugares, uso un HashMap. Gracias @Michael – sravanreddy001