1
resposta

TestePerformance - Existe muita diferença na busca feita em uma ArrayList e um HashSet. Leva muito mais tempo na busca de ArrayList.

public class TestePerformance {

    public static void main(String[] args) {

        long registro = 50000;

        Collection<Integer> numerosL = new ArrayList<>();

        // Inserção ArrayList. -------------------
        long iniInsercaoL = System.currentTimeMillis();

        for(int i = 1; i <= registro; i++) {
            numerosL.add(i);
        }

        long fimInsercaoL = System.currentTimeMillis();

        long tempoTotalInsercaoL = fimInsercaoL - iniInsercaoL;

        System.out.println("Tempo Inserção ArrayList: " + tempoTotalInsercaoL);


        // Busca ArrayList. -------------------
        long iniBuscaL = System.currentTimeMillis();

        for (Integer numeros : numerosL) {
            numerosL.contains(numeros);
        }

        long fimBuscaL = System.currentTimeMillis();

        long tempoTotalBuscaL = fimBuscaL - iniBuscaL;

        System.out.println("Tempo Busca ArrayList: " + tempoTotalBuscaL);

// ------------------------------------------------------
        System.out.println();

        Collection<Integer> numerosS = new HashSet<>();

        // Inserção HashSet. -------------------
        long iniInsercaoS = System.currentTimeMillis();

        for(int i = 1; i <= registro; i++) {
            numerosS.add(i);
        }

        long fimInsercaoS = System.currentTimeMillis();

        long tempoTotalInsercaoS = fimInsercaoS - iniInsercaoS;

        System.out.println("Tempo Inserção HashSet: " + tempoTotalInsercaoS);


        // Busca HashSet. -------------------
        long iniBuscaS = System.currentTimeMillis();

        for (Integer numeros : numerosS) {
            numerosS.contains(numeros);
        }

        long fimBuscaS = System.currentTimeMillis();

        long tempoTotalBuscaS = fimBuscaS - iniBuscaS;

        System.out.println("Tempo Busca HashSet: " + tempoTotalBuscaS);
    }

}
1 resposta

Boa, Saint'Clair!!

É isso mesmo, se quisermos fazer uma busca completa como fizemos agora usando o método contains() o ideal é sempre usar o hashSet, já que ele usa uma estrutura de dados chamada tabela de espalhamento que permite fazer a busca por um elemento em tempo constante.

Enquanto o contains() da ArrayList faz uma busca linear que percorre a coleção inteira - e quanto maior a coleção, maior o tempo de busca.

Bons estudos. E continue assim! ;)