Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Exercício 13; Collections Framework

Neste exercício, a resposta dele informa que LinkedList, é bem mais rápida que ArrayList.

Porem no teste com o meu código, aponta que ArrayList é bem mais rapido que LinkedList.

Alguém poderia me ajudar com esse exercício ?


public class TestaOrdenacao {
    public static void main(String[] args) {

        System.out.println("Iniciando...");
        long inicio = System.currentTimeMillis();

        //List<Integer> teste = new LinkedList<>();
        List<Integer> teste = new ArrayList<>();

        for (int i = 0; i < 30000; i++){
            teste.add(i);
        }

        for (int i = 0; i < 30000; i++){
            teste.get(i);
        }

        long fim = System.currentTimeMillis();
        double tempo = (fim - inicio) / 1000.0;

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

    }
}
4 respostas
solução!

Resolvi. Tinha me esquecido de adicionar tudo ao índice zero.

public class TestaOrdenacao {
    public static void main(String[] args) {

        System.out.println("Iniciando...");
        long inicio = System.currentTimeMillis();

        //List<Integer> teste = new LinkedList<>();
        List<Integer> teste = new ArrayList<>();

        for (int i = 0; i < 30000; i++){
            teste.add(0, i);
        }        

        long fim = System.currentTimeMillis();
        double tempo = (fim - inicio) / 1000.0;

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

    }
}

No meu, o ArrayList continua muito mais rápido.

No meu acontece do arraylist (0,011) ser mais rápido quando : - (1) Primeiro eu rodo o LinkedList pegando (além de inserir ) os elementos e depois eu comento (pegando os elementos foreach ou get()) e rodo somente com inserindo os elementos (código do ex). -Se eu rodo somente inserindo os elementos (código do ex)) o valor é de 0,0080, depois de rodar esse procedimento fica 0,026. O que é muito estranho, como se estivesse alocando algo. Isso poderia acontecer?

Pessoal, sei que a questão foi marcada como resolvida, porém percebi um erro de interpretação. Então vamos lá: Em primeiro lugar , o exercicio propõe que o façamos em 2 partes: 1) Inserir elementos apenas na primeira posição e comparar as implementações do ArrayList com o LinkedList.  Isso se obtém no seguinte for:

for (int i = 0; i < 30000; i++) {
            teste.add(0, i);
        }

Ao final deste for pode-se usar a linha para obter o time atual e fazer a conta do tempo gasto nas inserções:

// restante do código...
long fim = System.currentTimeMillis();
double tempo = (fim - inicio) / 1000.0;
System.out.println("Tempo gasto: " + tempo);

Fazendo este teste percebe-se que para inserir na primeira posição da lista o LinkedList tem uma performance melhor que o Arraylist. 2) Já para a segunda parte , devemos percorrer a lista buscando os elementos. Então, para o teste sair como esperado, o ideal seria inserirmos normalmente um em cada posição da lista e não apenas na primeira posição:

    // restante do código...
        for (int i = 0; i < 30000; i++) {
            teste.add(i);
        }

Só então fazemos a busca para percorrer a lista marcando o tempo:

       long inicio = System.currentTimeMillis();

        for (int i = 0; i < 30000; i++) {
            teste.get(i);
        }
        long fim = System.currentTimeMillis();
        double tempo = (fim - inicio) / 1000.0;
        System.out.println("Tempo gasto: " + tempo);

Desta maneira, percebemos claramente que o algorítmo de busca implementado em uma ArrayList é muito mais rápido que o implementado em uma LinkedList