Empecé a aprender Java. ¿Cuándo usaría un HashMap sobre un TreeMap?¿Cuál es la diferencia entre un HashMap y un TreeMap?
Respuesta
TreeMap
es un ejemplo de SortedMap
, lo que significa que el orden de las claves se puede ordenar, y al iterar sobre las teclas, puede esperar que estén en orden.
HashMap
por el contrario, no ofrece dicha garantía. Por lo tanto, cuando se itera sobre las teclas de un HashMap
, no se puede estar seguro de qué orden van a estar en.
HashMap
será más eficiente en general, por lo que utilizarlo siempre que no se preocupan por el orden de la llaves.
'HashMap' es más eficiente en términos de tiempo. Un 'TreeMap' es más eficiente en el uso del espacio. – erickson
TreeMap solo funciona con objetos Comparables, HashMap solo funciona con objetos con una implementación adecuada de hashCode(). – Thilo
@erickson: ¿podría publicar una referencia/enlace para hacer una copia de seguridad de esta declaración? –
Utilice HashMap
la mayoría de las veces, pero use TreeMap
cuando necesite la clave que se va a ordenar (cuando necesite repetir las teclas).
Casi siempre usa HashMap
, solo debe usar TreeMap
si necesita que sus llaves estén en un orden específico.
HashMap
se utiliza para la búsqueda rápida, mientras que TreeMap
se utiliza para las iteraciones ordenadas sobre el mapa.
En resumen:
- HashMap: Estructura de búsqueda-matriz, basado en hashCode(), es igual a implementaciones(), O (1) la complejidad de ejecución para la inserción y búsqueda, sin ordenar
- TreeMap: Árbol estructura, basada en compareTo (aplicación), O (log (n)) la complejidad de ejecución para la inserción y búsqueda, ordenadas
Tomado de: HashMap vs. TreeMap
La complejidad de un HashMap es O (1 + a). Dependiendo de la función hashCode "a" puede llegar a "n" en el peor de los casos. – 30thh
Alo ng con almacenamiento de clave ordenado, otra diferencia es con TreeMap, el desarrollador puede dar (String.CASE_INSENSITIVE_ORDER) con las claves de cadena, por lo que el comparador ignora el caso de la clave al realizar la comparación de las teclas en el acceso al mapa. No es posible dar esa opción con HashMap, siempre es una comparación sensible a mayúsculas y minúsculas en HashMap.
No es necesario. Si realmente quiere esto, puede simplemente hacer un decorador para un mapa, para lo cual, para todo lo relacionado con la entrada clave, lo hace todo en mayúscula/minúscula y delegue en el mapa decorado. Al hacerlo, no es tan difícil tener un hashmap "insensible a mayúsculas y minúsculas". De todos modos, esta respuesta probablemente esté un poco fuera de tema: solo estás hablando de un caso de uso muy específico de treemap, para el cual no veo que sea muy significativo como una comparación entre hashmap/treemap –
voy a hablar de la HashMap y TreeMap aplicación en Java:
HashMap - aplicar interfaz del mapa básico
- implementado por una serie de cubos, cada cubeta es un LinkedList de entradas
- tiempo de ejecución de las operaciones básicas: put(), O medio (1), peor caso O (n), ocurre cuando la tabla es r esized; get(), remove(), promedio O (1)
- no sincronizado, para sincronizarlo:
Map m = Collections.synchronizedMap(new HashMap(...));
- El orden de iteración del mapa es impredecible.
TreeMap - aplicar mapa de interfaz navegable
- implementado por un árbol rojo-negro
- momento de ejecutar operaciones básicas: put(), get(), remove(), peor de los casos O (lgn)
- no sincronizado, para sincronizarlo:
SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));
- proporcionar la iteración ordenada. upperKey(), lowerKey() se puede utilizar para obtener el sucesor y el predecesor de una clave determinada.
En resumen, la mayor diferencia entre HashMap y TreeMap es que TreeMap implementa NavigableMap<K,V>
, que proporcionan la función de repetición ordenada. Además, tanto HashMap como TreeMap son miembros del framework Java Collection. Puede investigar el source code of Java para saber más sobre sus implementaciones.
HashMap
es implementado por Hash Table, mientras que TreeMap
se implementa por Red-Black tree
. La diferencia principal entre HashMap
y TreeMap
refleja la diferencia principal entre Hash
y Binary Tree
, es decir, al iterar, la garantía de TreeMap puede el orden de clave que se determina mediante el método compareTo() de un elemento o un conjunto de comparación en el constructor de TreeMap.
Eche un vistazo a following diagram.
- 1. cuál es la diferencia entre mapa y hashmap en STL
- 2. Diferencia entre HashSet y HashMap?
- 3. Diferencia entre un HashMap y un diccionario ADT
- 4. ¿Cuál es la diferencia entre un predicado y un funcionador?
- 5. ¿Cuál es la diferencia entre un método y un selector?
- 6. Cuál es la diferencia entre un subproceso y un controlador
- 7. ¿Cuál es la diferencia entre un controlador y un servicio?
- 8. ¿Cuál es la diferencia entre un lenguaje y un marco?
- 9. ¿Cuál es la diferencia entre un ayudante y un parcial?
- 10. ¿Cuál es la diferencia entre un nanokernel y un exokernel?
- 11. ¿Cuál es la diferencia entre un árbol y un directorio?
- 12. ¿Cuál es la diferencia entre un algoritmo y un método
- 13. ¿Cuál es la diferencia entre un vector y un vértice?
- 14. ¿Cuál es la diferencia entre un REPL y un intérprete?
- 15. ¿Cuál es la diferencia entre un IORef y un MVar?
- 16. ¿Cuál es la diferencia entre un JavaBean y un POJO?
- 17. ¿Cuál es la diferencia entre un "nonce" y un "GUID"?
- 18. ¿Cuál es la diferencia entre @ y @@ en un módulo?
- 19. ¿Cuál es la diferencia entre un hilo y una fibra?
- 20. ¿Cuál es la diferencia entre un algoritmo y una función?
- 21. ¿Cuál es la diferencia entre una matriz y un objeto?
- 22. ¿Cuál es la diferencia entre una mónada y un cierre?
- 23. ¿Cuál es la diferencia entre nohup y un daemon?
- 24. ¿Cuál es la diferencia entre una instancia y un objeto?
- 25. ¿Cuál es la diferencia entre un tema y una plantilla?
- 26. ¿Cuál es la diferencia entre un RoutedCommand y una RoutedUICommand?
- 27. ¿Cuál es la diferencia entre GenericServlet, HttpServlet y un Servlet?
- 28. ¿cuál es la diferencia entre -C y gzipping un mysqldump?
- 29. ¿Cuál es la diferencia entre un método y una función?
- 30. ¿Cuál es la diferencia entre. y # en un archivo css?
Stackoverflow no es sólo para el autor de la pregunta cuestión, sino también para otras personas en busca de respuestas. Por lo tanto, está perfectamente bien para mí si encuentro aquí una respuesta que también está contenida en algún libro que no tengo ... –