2010-09-22 29 views
22

No tuve el sentido de Maps en Java. ¿Cuándo se recomienda utilizar un mapa en lugar de una lista?Lista vs Mapa en Java

gracias de antemano,

nohereman

Respuesta

19

mapa de Java: un objeto que se asigna a los valores claves. Un mapa no puede contener claves duplicadas; cada tecla se puede asignar a un máximo de un valor.

Lista de Java: colección ordenada (también conocida como secuencia). El usuario de esta interfaz tiene un control preciso sobre en qué parte de la lista se inserta cada elemento. El usuario puede acceder a los elementos por su índice entero (posición en la lista) y buscar elementos en la lista.

La diferencia es que son diferentes. El mapa es un mapeo de clave/valores, una lista de una lista de elementos.

+3

se olvidó que las listas pueden contener duplicados – Woot4Moo

+0

¿Es una lista ordenada? ¿O 'ordenado' significa algo diferente a 'ordenado'? No tratando de nitpick ... –

+0

el doc de Java dice ordenado, casi pongo lo mismo Tony. – Woot4Moo

1

Cuando se desea asignar en lugar de la lista. Los nombres de esas interfaces tienen un significado, y no debes ignorarlo.

Utilice un mapa cuando desee que su estructura de datos represente un mapeo para las claves de los valores. Use una lista cuando desee que sus datos se almacenen en un formato arbitrario ordenado.

+0

Esto es como usar una palabra en su propia definición. Esta no es una respuesta muy útil ... –

+0

-1 por ser una respuesta inútil –

+0

inútil. –

0

Map y List sirven para otro propósito.

List tiene la colección de elementos. Pedido (puede obtener el artículo por índice).

Map mantiene la clave de asignación -> valor. P.ej. asignar persona a posición: "JBeg" -> "programador". Y está desordenado. Puede obtener valor por clave, pero no por índice.

+0

La implementación del mapa de árbol no está desordenada. – jrowe08

3

Depende de sus preocupaciones sobre el rendimiento. Un mapa más explícitamente un HashMap garantizará O (1) en inserciones y eliminaciones. Una lista tiene como mucho O (n) para encontrar un artículo. Entonces, si tiene la bondad de explicar en qué consiste su situación, podemos ayudarlo más.

33

Digamos que tiene un grupo de estudiantes con nombres e ID de estudiantes. Si los coloca en una lista, la única forma de encontrar al alumno con student_id = 300 es mirar cada elemento de la lista, uno a la vez, hasta encontrar el alumno adecuado.

Con un mapa, asocia la identificación de cada alumno y la instancia del alumno. Ahora puedes decir "tráeme estudiante 300" y recuperar a ese alumno al instante.

Use un Mapa cuando necesite seleccionar miembros específicos de una colección. Use una lista cuando no tenga sentido hacerlo.

Digamos que tenía exactamente las mismas instancias de estudiantes, pero su tarea era generar un informe de todos los nombres de los estudiantes. Los pondría en una lista ya que no habría necesidad de seleccionar y elegir estudiantes individuales y, por lo tanto, no es necesario un mapa.

+3

+1 para no citar javadoc y proporcionar ejemplo ilustrativo :) – andr

+1

que técnicamente no es correcto. Si el ID del alumno se asigna a un índice, p. id 300 -> 299 [índice] es una búsqueda de tiempo constante – Woot4Moo

+2

@ Woot4Moo No es una buena suposición que hacer. –

2

Creo que es mucho la cuestión de cómo desea acceder a sus datos. Con un mapa puede acceder "directamente" a sus elementos con una clave conocida, en una lista deberá buscarla, evan si está ordenada.

Compare:

List<MyObject> list = new ArrayList<MyObject>(); 
//Fill up the list 
// Want to get object "peter" 
for(MyObject m : list) { 
if("peter".equals(m.getName()) { 
    // found it 
} 
} 

En un mapa que puede escribir sólo

Map<String, MyObject> map = new HashMap<String, MyObject>(); 
// Fill map 
MyObject getIt = map.get("peter"); 

Si tiene datos para procesar y hay que hacerlo con todos los objetos de todos modos, una lista es lo que quiere. Si desea procesar objetos individuales con una clave conocida, un mapa es mejor. No es la respuesta completa (solo mi 2 ...) pero espero que pueda ser de ayuda.