Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

Você está aqui: Java ::: Coleções (Collections) ::: Passos Iniciais

Entendendo a classe ArrayList

Quantidade de visualizações: 16316 vezes


A classe ArrayList é uma implementação de array redimensionável da interface List. Esta classe implementa todas as operações opcionais de uma lista e permite todos os elementos, inclusive null. Além de implementar a interface List, esta classe fornece métodos para manipular o tamanho do array sendo usado internamente para armazenar a lista. Esta classe é quase idêntica à Vector, exceto pelo fato de que ela não é sincronizada.

As operações size, isEmpty, get, set, iterator e listIterator são executadas em tempo constante. A operação add é executada em tempo constante amortizado, ou seja, adicionar n elementos exige um tempo O(n). Todas as outras operações são executadas em tempo linear (por assim dizer). O fator constante é baixo se comparado àquele da implementação de LinkedList.

Cada cópia de ArrayList tem uma capacidade (capacity). A capacidade é o tamanho do array usado para armazenar os elementos da lista. É sempre igual ou maior que o tamanho da lista. À medida que elementos são adicionados à ArrayList, sua capacidade é aumentada automaticamente. Os detalhes da política de crescimento não são especificados além do fato de que adicionar um elemento tem custo de tempo constante amortizado.

Uma aplicação pode aumentar a capacidade de uma instância da ArrayList antes de adicionar um grande número de elementos usando o método ensureCapacity. Isso pode reduzir a quantidade de realocação incremental.

Observe que esta implementação não é sincronizada. Se múltiplos threads acessarem uma instância de ArrayList concorrentemente, e no mínimo um dos threads modificarem a estrutura da lista, ela deverá ser sincronizada externamente (uma modificação de estrutura é qualquer operação que adiciona ou exclui um ou mais elementos, ou explicitamente redimensiona o array de suporte; meramente alterar o valor de um elemento não é uma modificação de estrutura). Geralmente isso é conseguido sincronizando algum objeto que naturalmente encapsule a lista. Se tal objeto não existir, a lista deve ser "encapsulada" usando o método Collections.synchronizedList. A melhor hora de fazer isso é na hora da crição do objeto, para evitar acessos não-sincronizados acidentais à lista:
List lista = Collections.synchronizedList(
                 new ArrayList(...));
Os iteradores retornados pelos métodos iterator e listIterator desta classe são fail-fast (capacidade rápida de responder a falhas): se a lista for modificada estruturalmente em qualquer momento depois que o iterador é criado, de qualquer forma exceto por meio dos métodos remove e add do próprio iterador, este lançará uma exceção ConcurrentModificationException. Assim, sob modificações concorrentes, o iterador falhará rapidamente e sem alarde, em vez de arriscar procedimentos arriscados e não determinísticos.

Observe que o comportamente fail-fast de um iterador não tem garanta de fábrica, ou seja, é impossível ter boas garantias de seu comportamente na ocorrência de modificações concorrente não sincronizadas. Iteradores fail-fast atiram exceções ConcurrentModificationException na base do melhor esforço. Assim, não é correto escrever programas que dependam desta exceção para funcionar corretamente: o comportamento fail-fast deve ser usado somente para detectar bugs.

Link para compartilhar na Internet ou com seus amigos:

Desafios, Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 28 usuários muito felizes estudando em nosso site.