Qual a diferença entre eles? Eu sei disso
Um LinkedHashSet é uma versão ordenada do HashSet que mantém uma lista duplamente vinculada em todos os elementos. Use esta classe em vez do HashSet quando se importar com a ordem da iteração. Quando você repete um HashSet, o pedido é imprevisível, enquanto um LinkedHashSet permite que você repita os elementos na ordem em que foram inseridos.
Mas no código-fonte do LinkedHashSet, existem apenas os construtores de chamada do HashSet. Então, onde estão os pedidos de lista e inserção com link duplo?
java
hashset
linkedhashset
Shikarn-O
fonte
fonte
Respostas:
A resposta está em que construtores os
LinkedHashSet
usos para construir a classe base:E (um exemplo de) um
HashSet
construtor que aceita um argumento booleano é descrito e tem a seguinte aparência:fonte
LinkedHashSet
Os construtores de invocam o seguinte construtor de classe base:Como você pode ver, o mapa interno é a
LinkedHashMap
. Se você olhar para dentroLinkedHashMap
, descobrirá o seguinte campo:Esta é a lista vinculada em questão.
fonte
HashSet é um conjunto não ordenado e não classificado .
LinkedHashSet é a versão ordenada do HashSet.
A única diferença entre HashSet e LinkedHashSet é que:
LinkedHashSet mantém a ordem de inserção.
Quando iteramos através de um HashSet , a ordem é imprevisível enquanto previsível no caso de LinkedHashSet .
A razão pela qual o LinkedHashSet mantém a ordem de inserção é o seguinte:
A estrutura de dados subjacente usada é a lista vinculada duplamente .
fonte
Você deve olhar para a fonte do
HashSet
construtor que ele chama ... é um construtor especial que torna o apoioMap
um emLinkedHashMap
vez de apenas umHashMap
.fonte
Sugiro que você use a
LinkedHashSet
maior parte do tempo, porque ele tem melhor desempenho geral ):HashMap
, porque na maioria das vezes usamos estruturas Set para iteração.Você pode ver a página de teste de origem aqui: O Exemplo de Teste de Desempenho Final
fonte
HashSet: Não ordenado, na verdade. se você passar o parâmetro significa
Saída: Pode
2,1,3
não ser previsível. próxima vez que outro pedido.LinkedHashSet()
que produzem ordem FIFO.fonte
HashSet
não mantenha a ordem do item de inserçãoLinkedHashSet
mantenha a ordem do item de inserçãoExemplo
HashSet
resultadoLinkedHashSet
resultadofonte
HashSet:
A estrutura de dados sublinhada é Hashtable. Objetos duplicados não são permitidos. A ordem de inserção não é preservada e é baseada no código hash dos objetos. A inserção nula é possível (apenas uma vez). Ele implementa a interface Serializable, Clonable, mas não RandomAccess. O HashSet é a melhor opção se a operação frequente for a pesquisa.
Construtores:
LinkedHashSet:
É uma classe filho do HashSet. é exatamente o mesmo que o HashSet, incluindo (Construtores e Métodos), exceto as seguintes diferenças.
Diferenças HashSet:
LinkedHashSet:
fonte
Se você der uma olhada nos construtores chamados da
LinkedHashSet
classe, verá que internamenteLinkedHashMap
é usado para fins de backup.fonte
Todos os métodos e construtores são iguais, mas apenas uma diferença é que o LinkedHashset manterá a ordem de inserção, mas não permitirá duplicatas.
O Hashset não manterá nenhum pedido de inserção. É uma combinação de lista e conjunto simples :)
fonte