2011-11-02 42 views
57

¿Cuál es la razón por la cual no siempre podemos usar un HashMap, aunque es mucho más eficiente que ArrayList o LinkedList en add, eliminar operaciones, también independientemente del número de los elementos.Cuándo usar HashMap sobre LinkedList o ArrayList y viceversa

Lo busqué en Google y encontré algunas razones, pero siempre había una solución para usar HashMap, con las ventajas aún vigentes.

+11

'' Lists' y Maps' son dos * * completamente diferentes estructuras de datos, con diferentes operaciones e invariantes. ¿Puede explicar el contexto/los requisitos en los que piensa que ambas serían soluciones aceptables? –

+3

Aparentemente, nunca necesitó mantener un conjunto de cosas * en un orden particular * ... –

+39

Voto a favor, ¿por qué? Creo que esta es una pregunta adecuada. Sin embargo, muestra falta de conocimiento, pero en la pregunta de SO no se debe votar negativamente por mostrar falta de conocimiento. De hecho, una pregunta es siempre el resultado de la falta de conocimiento. –

Respuesta

78

Las listas representan un orden secuencial de los elementos. Los mapas se utilizan para representar una colección de pares clave/valor.

Si bien puede utilizar un mapa como una lista, hay algunas desventajas definidas de hacerlo.

Orden de mantenimiento: - Se ordena una lista por definición. Agrega elementos y luego puede repetir la lista en el orden en que insertó los elementos. Cuando agrega elementos a un HashMap, no está garantizado que recupere los artículos en el mismo orden en que los puso. Hay subclases de HashMap como LinkedHashMap que mantendrán el orden, pero en general no se garantiza el orden con un Mapa.

clave/valor semántica: - El propósito de un mapa es para almacenar artículos en base a una clave que se puede utilizar para recuperar el elemento en un momento posterior. Funcionalidad similar solo se puede lograr con una lista en el caso limitado donde la clave pasa a ser la posición en la lista.

Lectura de códigos Considere los siguientes ejemplos.

// Adding to a List 
    list.add(myObject);   // adds to the end of the list 
    map.put(myKey, myObject); // sure, you can do this, but what is myKey? 
    map.put("1", myObject);  // you could use the position as a key but why? 

    // Iterating through the items 
    for (Object o : myList)   // nice and easy 
    for (Object o : myMap.values()) // more code and the order is not guaranteed 

funcionalidad Colección Algunos grandes funciones de utilidad están disponibles para las listas de la clase a través de las colecciones. Por ejemplo ...

// Randomize the list 
    Collections.shuffle(myList); 

    // Sort the list 
    Collections.sort(myList, myComparator); 

Espero que esto ayude,

+0

LinkedLists a menudo se dice que son malas debido a problemas de rendimiento.Frecuentemente uso LinkedLists sobre ArrayLists debido al orden de los elementos. ¿Sería mejor (para el rendimiento y la memoria) si utilizara HashMaps con posiciones como teclas? – Seza

28

Las listas y los mapas son estructuras de datos diferentes. Los mapas se utilizan para cuando quiere asociar una clave con un valor y las Listas son una colección ordenada.

Map es una interfaz en Java Collection Framework y HashMap es una implementación de la interfaz de Map. HashMap es eficiente para ubicar un valor basado en una clave e insertar y eliminar valores basados ​​en una clave. Las entradas de un HashMap no están ordenadas.

ArrayList y LinkedList son una implementación de la interfaz de lista. LinkedList proporciona acceso secuencial y generalmente es más eficiente para insertar y eliminar elementos en la lista, sin embargo, es menos eficiente para acceder a los elementos en una lista. ArrayList proporciona acceso aleatorio y es más eficiente para acceder a los elementos, pero generalmente es más lento al insertar y eliminar elementos.

Cuestiones relacionadas