2009-06-10 22 views

Respuesta

21

Resuelven diferentes problemas, LinkedHashMap realiza un mapeo de las claves de los valores, un LinkedHashSet simplemente almacena una colección de cosas sin duplicados.

Una vinculado mapa hash es de pares clave/valor de mapeo - por ejemplo, los nombres y edades de almacenamiento:

Map<String,Integer> namesAndAges = new LinkedHashMap<String,Integer>(); 
namesAndAges.put("Benson", 25); 
namesAndAges.put("Fred", 19); 

Por otra parte, un conjunto de hash vinculado es para almacenar una colección de una cosa - - nombres, por ejemplo:

Set<String> names = new LinkedHashSet<String>(); 
names.add("Benson"); 
names.add("Fred"); 
+1

Estaba buscando el código fuente de ArrayList solo para asegurarme de que tenía que usar un conjunto (que tiene un buen rendimiento de búsqueda) en lugar de un ArrayList (que tiene que recorrer todos los registros para encontrar algo) –

+4

El propósito de LinkedHashMap sobre HashMap es que LinkedHashMap también usa LinkedList internamente para almacenar el orden en que se han agregado los pares clave/valor.Por lo tanto, iterar sobre LinkedHashMap dará como resultado un par de clave/valor en el orden en que se agregaron, mientras que un HashMap clásico se repetirá en función del orden del código de hash de cada clave. –

+1

Eso es correcto, pero como la pregunta era comparar LinkedHashMaps con LinkedHashSets, decidí centrarme en las diferencias, en lugar de en las similitudes. :-) – Benson

2

Uno es un juego, y el otro es un mapa. Elija la estructura de datos correcta para un escenario dado.

3

Un conjunto tiene solo valores, no se pueden insertar duplicados. Un mapa tiene un par de clave/valor. Ellos tienen diferentes usos.

Un conjunto se utilizará como una colección, pasando en un grupo de objetos, mientras que un mapa es útil para cuando tiene una clave única para identificar cada elemento y desea poder acceder mediante esa clave.

5

LinkedHashSet contienen internamente una lista doblemente enlazada ejecuta a través de todas sus entradas que define el orden de los elementos. Esta clase permite elementos nulos.

Esta implementación de clase no está sincronizada, por lo que debe estar sincronizada externamente. LinkedHashMap no está sincronizado o bien y debe ser sincronizado externamente

Por ejemplo:

Map map = Collections.synchronizedMap(new LinkedHashMap()); 

Aparte de que almacena LinkedHashSet valores individuales por elemento y almacena LinkedHashMap par clave/valor.
En el diagrama a continuación puede ver java.util.Collections. cajas sólidas muestran implementación de la clase concreta
alt text http://www.softfinity.com/diag1.png

2

LinkedHashMap y LinkedHashSet tiene sólo una diferencia y que viene por HashMap y HashSet diferencia, sus padres. De nuevo, HashSet es solo una variación de HashMap. Puede decir HashSet como HashMap con todos los valores apuntando a un único objeto final. Por lo tanto, ambos no te dan muchas diferencias.

Al usar LinkedHashSet, debe usar solo un objeto final que no sean sus llaves. Usando LinkedHashMap, si establece los valores como nulos para todas las claves, entonces es mejor que LinkedHashSet para el propósito del conjunto.

Cuestiones relacionadas