3
respostas

Desempenho ArrayList vs LinkedList

Rodei o código da aula e o resultado não foi o esperado na inserção de elementos: A LinkedList demorou mais para inserir os elementos.

package aula3;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class TesteArrayListLinkedList {

        public static void main(String[] args) {

            System.out.println("**** ArrayList vs LinkedList ***");

            List<Integer> numerosArrayList = new ArrayList<>();
            List<Integer> numerosLinkedList = new LinkedList<>();
            int quantidadeElementos = 10000000;
            int elemento = 1000000;

            long tempoArrayList  = insereElementosNo(numerosArrayList, quantidadeElementos);
            long tempoLinkedList = insereElementosNo(numerosLinkedList, quantidadeElementos);

            System.out.println("Inserção na ArrayList demorou  " + tempoArrayList);
            System.out.println("Inserção na LinkedList demorou " + tempoLinkedList);

            tempoArrayList = removePrimeirosElementos(numerosArrayList);
            tempoLinkedList = removePrimeirosElementos(numerosLinkedList);


            System.out.println("Remoção da ArrayList demorou  " + tempoArrayList);
            System.out.println("Remoção da LinkedList demorou " + tempoLinkedList);

            tempoArrayList = acessaElemento(numerosArrayList,elemento);
            tempoLinkedList = acessaElemento(numerosLinkedList, elemento);

            System.out.println("Acesso Elemento Arraylist: "+tempoArrayList);
            System.out.println("Acesso Elemento LinkedList: "+tempoLinkedList);
        }

        private static long acessaElemento(List<Integer> list, int i) {

            long ini = System.currentTimeMillis();
            Integer aux = list.get(i);
            long fim = System.currentTimeMillis();



            return fim - ini;
        }

        /*
         * removendo 100 elementos sempre na primeira posição
         */
        private static long removePrimeirosElementos(List<Integer> numeros) {
            long ini = System.currentTimeMillis();

            for (int i = 0; i < 100; i++) {
                numeros.remove(0); //removendo sempre o primeiro elemento
            }
            long fim = System.currentTimeMillis();
            return fim-ini;
        }

        private static long insereElementosNo(List<Integer> numeros, int quantidade) {
            long ini = System.currentTimeMillis();
            for (int i = 0; i < quantidade; i++) {
                numeros.add(i);
            }
            long fim = System.currentTimeMillis();
            return fim-ini;
        }

    }

Veja a saída:

** ArrayList vs LinkedList *

Inserção na ArrayList demorou 489

Inserção na LinkedList demorou 1835

Remoção da ArrayList demorou 1764

Remoção da LinkedList demorou 0

Acesso Elemento Arraylist: 0

Acesso Elemento LinkedList: 10

3 respostas

Eai meu caro tudo bem ? este teste usando Random para sortear uma posição, a LinkedList vai ter um desempenho muito lenta como ja vista.. Sempre quando eu usava eu dava preferência para o ArrayList. É mais rápida ganha tempo em 80% e eu acho que seria mais rápido também.

Olá Weverton

Aonde você viu a utilização de Random neste exemplo ? Está implícito em alguma destas classes utilizadas ?

Levantei a questão pelo que foi dito na aula, onde a LinkedList seria mais rápida do que ArrayList no caso da inserção ou remoção de elementos no início ou fim da lista.

Bom dia, então comigo dava certo, percebia que ia mais rápido, mas ja que você esta falando amigo, vou averiguar depois.