"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Principais diferenças entre HashSet e TreeSet em Java

Principais diferenças entre HashSet e TreeSet em Java

Publicado em 2024-11-05
Navegar:641

Top Key Differences Between HashSet and TreeSet in Java

1. Visão geral de HashSet e TreeSet

Antes de mergulhar nas diferenças, vamos revisar brevemente o que são HashSet e TreeSet.

1.1 O que é HashSet?

Um HashSet é uma coleção que usa uma tabela hash para armazenamento. Implementa a interface Set, o que significa que não permite elementos duplicados. Os elementos são desordenados e não classificados, tornando o HashSet adequado para cenários onde você precisa de pesquisa, inserção e exclusão rápidas.

1.2 O que é TreeSet?

Um TreeSet é uma coleção que implementa a interface NavigableSet. Ele usa uma árvore Vermelho-Preta para armazenamento, o que significa que os elementos são armazenados de forma ordenada e ordenada. TreeSet também não permite elementos duplicados, mas é ideal para situações onde é necessário manter uma ordem natural dos elementos.

2. Principais diferenças entre HashSet e TreeSet

2.1 Pedido

  • HashSet : Não mantém nenhuma ordem dos elementos. A ordem em que os elementos são adicionados não se correlaciona com a ordem em que são armazenados.
  • TreeSet : ordena automaticamente os elementos com base em sua ordem natural ou em um comparador especificado.

2.2 Desempenho

  • HashSet : Oferece complexidade de tempo constante O(1) para operações básicas como adicionar, remover e conter, tornando-o muito mais rápido quando a ordem não é uma preocupação.
  • TreeSet : Oferece complexidade de tempo log(n) para operações básicas, pois os elementos são armazenados em uma estrutura de árvore, o que leva mais tempo do que uma estrutura baseada em hash.

2.3 Mecanismo de Armazenamento Interno

HashSet : usa uma tabela hash internamente. O código hash de cada elemento é usado para determinar seu local de armazenamento. Se dois elementos tiverem o mesmo código hash, uma técnica chamada encadeamento ou sondagem é usada para lidar com colisões.

Código de exemplo:

Set hashSet = new HashSet();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Mango");

TreeSet : Usa uma árvore Vermelho-Preta internamente. Cada elemento é colocado de acordo com sua ordem natural ou com um comparador fornecido, garantindo que a árvore permaneça equilibrada.

Código de exemplo:

Set treeSet = new TreeSet();
treeSet.add("Apple");
treeSet.add("Banana");
treeSet.add("Mango");

2.4 Elementos Nulos

  • HashSet : Permite um elemento nulo, pois pode fazer o hash do valor nulo.
  • TreeSet : Não permite elementos nulos porque precisa comparar elementos para classificá-los, e comparar nulo com qualquer objeto gera uma NullPointerException.

2.5 Sincronização

  • HashSet : Não sincronizado por padrão, mas pode ser sincronizado usando Collections.synchronizedSet.
  • TreeSet : Também não é sincronizado por padrão, mas pode ser sincronizado da mesma maneira.

2.6 Elementos Duplicados

Tanto HashSet quanto TreeSet não permitem elementos duplicados. No entanto, o método de detecção de duplicatas é diferente. HashSet usa os métodos hashCode () e equals (), enquanto TreeSet usa os métodos compareTo () ou um Comparator.

2.7 Uso de memória

  • HashSet : Geralmente requer mais memória devido à tabela hash subjacente e ao potencial de listas vinculadas para lidar com colisões.
  • TreeSet : usa menos memória, pois usa uma estrutura de árvore, mas tem mais sobrecarga na manutenção da ordem.

2.8 Comparação com LinkedHashSet

HashSet vs. LinkedHashSet : Embora HashSet não garanta nenhum pedido, LinkedHashSet mantém o pedido de inserção. TreeSet , por outro lado, classifica os elementos naturalmente ou por um comparador personalizado.

2.9 Casos de uso

  • HashSet : Melhor usado quando o foco está no tempo de acesso rápido e a ordem não é importante.
  • TreeSet : Ideal para cenários onde os elementos precisam ser acessados ​​em uma ordem de classificação.

2.10 Resultado da Demonstração: Ordem de Iteração

A execução dos trechos de código abaixo demonstra a diferença na ordem de iteração:

// HashSet Example
Set hashSet = new HashSet();
hashSet.add("Zebra");
hashSet.add("Apple");
hashSet.add("Mango");
System.out.println("HashSet: "   hashSet); 
// Output may be unordered, e.g., [Apple, Mango, Zebra]

// TreeSet Example
Set treeSet = new TreeSet();
treeSet.add("Zebra");
treeSet.add("Apple");
treeSet.add("Mango");
System.out.println("TreeSet: "   treeSet); 
// Output will be sorted, e.g., [Apple, Mango, Zebra]

3. Conclusão

A escolha entre HashSet e TreeSet se resume às suas necessidades específicas:

  • Use HashSet quando precisar de um conjunto de alto desempenho sem se preocupar com a ordem dos elementos.
  • Use TreeSet quando precisar de elementos classificados naturalmente ou por uma ordem personalizada.

Tem alguma dúvida? Sinta-se à vontade para deixar um comentário abaixo!

Leia mais postagens em: As 10 principais diferenças entre HashSet e TreeSet em Java

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/anh_trntun_4732cf3d299/top-10-key-differences-between-hashset-and-treeset-in-java-49f3?1 Se houver alguma violação, entre em contato com study_golang@163 .com para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3