2
respostas

HashSet mais lento que AraryList?

Fiz o exemplo que falaram para testar a velocidade do hashSet e arrayList, fiz com 50000 conforme o exemplo, o hash ganhou por muito pouco mas eu quis exagerar e mudei pra 500000, para a diferença ser notável, mas aconteceu o inverso.

Tempo gasto ArrayList: 131901 Tempo gasto HashSet: 165388

insira seu código aqui package br.com.alura;

import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set;

public class TestaPerformace {

public static void main(String[] args) {

    List<Integer> numeros = new ArrayList<Integer>();

    long inicio = System.currentTimeMillis();

    for(int i=1 ; i<=500000; i++)
    {
    numeros.add(i);    
    }

    for (Integer numero : numeros) {
        numeros.contains(numero);

    }


    long fim = System.currentTimeMillis();

    long tempoDeExecucao = fim - inicio;

    System.out.println("Tempo gasto ArrayList: " + tempoDeExecucao);



    Set<Integer> numeros2 = new HashSet<Integer>();





    long inicio2 = System.currentTimeMillis();

    for(int i=1 ; i<=500000; i++)
    {
    numeros2.add(i);    
    }

    for (Integer numero : numeros2) {
        numeros.contains(numero);

    }


    long fim2 = System.currentTimeMillis();

    long tempoDeExecucao2 = fim2 - inicio2;

    System.out.println("Tempo gasto HashSet: " + tempoDeExecucao2);
}

}

insira seu código aqui `

2 respostas

O tempo para encontrar um objeto específico num ArrayList depende do número de itens que temos no array. Se você tiver dados duplicados, você deve usar ArrayList, caso contrário, você pode usar hashset porque o conjunto terá um desempenho muito melhor (O(n) vs O(n^2) para a lista), e isso é normal porque evitar duplicatas é o objetivo de um set.

Seu código do HashSet está usando numeros ao invés de numeros2:

 for (Integer numero : numeros2) {
        numeros.contains(numero);
    }

O correto seria:

 for (Integer numero : numeros2) {
        numeros2.contains(numero);
    }

Mais detalhes: https://www.baeldung.com/java-hashset-arraylist-contains-performance

Verdade, corrigi o código e ficou muito mais clara a diferença, acredito que esse erro de digitação já estava ai na primeira vez q eu testei pq foi pequena a diferença.

Tempo gasto ArrayList: 139476 Tempo gasto HashSet: 116