Está en la página 1de 1

Java: Diferena entre LinkedList, ArrayList e Vector. Por valdeka Retirado do Forum GUJ: http://www.guj.com.br/posts/list/71065.

java Autor: Login sergiotaborda As diferenas so basicamente relativas insero/remoo e iterao. A LinkedList a mais rpida para insero e iterao. Se necessria uma lista que carregada e depois apenas iterada (sem realizar-se aes de remoo ou alterao), a LinkedList a melhor opo. A ArrayList melhor caso se precise de acesso com ndice (chamado tambm de acesso aleatrio), como por exemplo, quando se usa o lista.get(i); por este motivo ela implementa tambm a interface RandomAccess. Quanto iterao, a ArrayList, em comparao com a LinkedList, mais rpida se utilizar-se um inteiro como ndice, porm, mais lenta ao ser utilizada com o iterator(). Com o novo lao for-estendido isto irrelevante, uma vez que a JVM vai otimizar e escolher a melhor forma. Vector uma classe mais antiga que foi remodelada para se ter a interface de List. Todos os acessos de insero e remoo so sincronizados e ela s deve ser usada em algoritmos que necessitem desse sincronismo. Apartir da verso 1.5 do Java existe a classe CopyOnWriteArrayList, a qual mais rpida que a LinkedList para o caso em que simplesmente se carrega a classe e depois a itera. A vantagem desta nova lista que se pode adicionar um elemento enquanto se est iterando a lista. Coisa que no se pode fazer nas outras trs. CopyOnWriteArrayList ideal se o objeto precisar manter um conjunto de listeners, por exemplo. A LinkedList tem uma vantagem suplementar, ela tambm implementa a interface Queue. Isto basicamente significa que voc pode criar lgicas de LIFO, FIFO , FILO e LILO de forma simplificada. Mas, normalmente nesse contexto as outras listas nem sequer so uma opo. Complexidades de operaes: LinkedList - A obteno de um elemento O(n) - A insero de um elemento O(1) - A remoo de um elemento O(n) - Um Iterator.remove O(1) ArrayList - A obteno de um elemento O(1) - A insero de um elemento O(1) amortizado, mas O(n) no pior caso desde que o vetor seja copiado e tenha seu tamanho alterado - A remoo de um elemento O(n) Fontes: http://valdeka.wordpress.com/2010/01/25/java-diferenca-entre-linkedlist-arraylist-e-vector/ http://stackoverflow.com/questions/322715/when-to-use-linkedlist-over-arraylist

También podría gustarte