¿Cuál es la diferencia entre ellos? Yo sé eso
LinkedHashSet es una versión ordenada de HashSet que mantiene una lista doblemente vinculada en todos los elementos. Use esta clase en lugar de HashSet cuando le importe el orden de iteración. Cuando itera a través de un HashSet, el orden es impredecible, mientras que LinkedHashSet le permite iterar a través de los elementos en el orden en que se insertaron.
Pero en el código fuente de LinkedHashSet solo hay constructores de llamadas de HashSet. Entonces, ¿dónde está la lista de doble enlace y el orden de inserción?
java
hashset
linkedhashset
Shikarn-O
fuente
fuente
Respuestas:
Las mentiras de respuesta en que los constructores los
LinkedHashSet
usos para la construcción de la clase base:Y (un ejemplo de)
HashSet
se describe un constructor que toma un argumento booleano, y se ve así:fuente
LinkedHashSet
Los constructores invocan el siguiente constructor de clase base:Como puede ver, el mapa interno es a
LinkedHashMap
. Si miras dentroLinkedHashMap
, descubrirás el siguiente campo:Esta es la lista vinculada en cuestión.
fuente
HashSet es un conjunto desordenado y sin ordenar .
LinkedHashSet es la versión ordenada de HashSet.
La única diferencia entre HashSet y LinkedHashSet es que:
LinkedHashSet mantiene el orden de inserción.
Cuando iteramos a través de un HashSet , el orden es impredecible mientras que es predecible en el caso de LinkedHashSet .
La razón de cómo LinkedHashSet mantiene el orden de inserción es que:
La estructura de datos utilizada subyacente es la Lista doblemente vinculada .
fuente
Debería mirar la fuente del
HashSet
constructor al que llama ... es un constructor especial que hace que el respaldo seaMap
enLinkedHashMap
lugar de solo aHashMap
.fuente
Le sugiero que use la
LinkedHashSet
mayor parte del tiempo, porque tiene un mejor rendimiento general ):HashMap
, porque la mayoría de las veces usamos estructuras Set para iterar.Puede ver la página de prueba de origen aquí: El ejemplo de prueba de rendimiento final
fuente
HashSet: Desordenado en realidad. si pasa el parámetro significa
Out Out: Puede
2,1,3
no ser predecible. La próxima vez otra orden.LinkedHashSet()
que producen la orden FIFO.fuente
HashSet
no mantener el orden del elemento de inserciónLinkedHashSet
mantener el orden del elemento de inserciónEjemplo
HashSet
salidaLinkedHashSet
salidafuente
HashSet:
La estructura de datos subrayada es Hashtable. No se permiten objetos duplicados. El orden de inserción no se conserva y se basa en el código hash de los objetos. La inserción nula es posible (solo una vez). Implementa la interfaz Serializable, Clonable pero no RandomAccess. HashSet es la mejor opción si la operación frecuente es la operación de búsqueda.
Constructores:
LinkedHashSet:
Es una clase secundaria de HashSet. es exactamente lo mismo que HashSet incluyendo (Constructores y Métodos) excepto las siguientes diferencias.
Diferencias HashSet:
LinkedHashSet:
fuente
Si echas un vistazo a los constructores llamados desde la
LinkedHashSet
clase, verás que internamente seLinkedHashMap
usa para fines de respaldo.fuente
Todos los métodos y constructores son iguales, pero solo una diferencia es que LinkedHashset mantendrá el orden de inserción, pero no permitirá duplicados.
Hashset no mantendrá ningún orden de inserción. Es una combinación de Lista y Conjunto simple :)
fuente