Como transformar um array em ArrayList em Java: 4 maneiras com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Transformando array em ArrayList: por que isso é uma eterna dor de cabeça para desenvolvedores Java

\n\n

Todo mundo que já escreveu em Java já se deparou com esta situação: você tem um array pronto String[] ou int[], mas a tarefa exige um ArrayList flexível com seus métodos add(), remove() e tamanho dinâmico. Parece algo simples, mas é exatamente essa pergunta que acumulou dezenas de milhares de visualizações e muitos votos no Stack Overflow. Por quê? Porque, como costuma acontecer em Java, existe uma solução "óbvia" que esconde armadilhas.

\n\n

Neste artigo, não vamos apenas fornecer código pronto. Vamos percorrer todas as maneiras de criar um ArrayList a partir de um array em Java, analisar seus prós e contras, desempenho e, o mais importante, quando usar cada opção. Após a leitura, você poderá escolher com confiança a ferramenta certa para sua tarefa e não esbarrar em um UnsupportedOperationException no momento mais inesperado.

\n\n

Vamos lá! (ou como dizem os javistas — let's dive into the code)

\n\n

Maneira 1: Clássico — Arrays.asList()

\n\n

A maneira mais popular e curta. Você provavelmente já viu:

\n\n
String[] fruits = {"apple", "banana", "cherry"};\nList<String> fruitList = Arrays.asList(fruits);
\n\n

Parece bonito, né? Mas tem um detalhe. O método Arrays.asList() retorna não um java.util.ArrayList, mas sim sua própria versão estática interna — java.util.Arrays.ArrayList. Esta é uma lista de tamanho fixo que não suporta operações de redimensionamento. Se você tentar fazer fruitList.add("date"), receberá um UnsupportedOperationException.

\n\n

Prós:

\n
    \n
  • Código extremamente curto e legível.
  • \n
  • Funciona como uma ponte entre o array e a API de coleções.
  • \n
  • Alterações na lista refletem no array original (e vice-versa).
  • \n
\n\n

Contras:

\n
    \n
  • Tamanho fixo — não é possível adicionar ou remover elementos.
  • \n
  • A lista retornada é um "invólucro" sobre o array, não um ArrayList completo.
  • \n
\n\n

Quando usar: Quando você precisa de uma lista somente para leitura, ou quando tem certeza de que o tamanho não mudará. Por exemplo, para passar para um método que aceita List<?> e não o modifica.

\n\n

Como obter um ArrayList completo a partir de Arrays.asList()?

\n\n

Basta envolver o resultado no construtor:

\n\n
String[] fruits = {"apple", "banana", "cherry"};\nArrayList<String> fruitList = new ArrayList<>(Arrays.asList(fruits));\nfruitList.add("date"); // Agora funciona sem erros
\n\n

Este truque é o meio-termo ideal. Você usa a sintaxe curta Arrays.asList, mas obtém uma coleção dinâmica completa.

\n\n

Maneira 2: Collections.addAll() — velocidade e controle

\n\n

Se você busca desempenho ou simplesmente quer evitar a cópia dupla (primeiro para uma lista de tamanho fixo, depois para um ArrayList), existe o método Collections.addAll():

\n\n
String[] fruits = {"apple", "banana", "cherry"};\nArrayList<String> fruitList = new ArrayList<>(fruits.length);\nCollections.addAll(fruitList, fruits);
\n\n

O que acontece aqui? Criamos imediatamente um ArrayList com o tamanho inicial necessário (para evitar reconstruções desnecessárias do array interno) e, em seguida, copiamos todos os elementos em uma única passagem. O método addAll é mais rápido que um loop for, pois chama System.arraycopy() em nível baixo.

\n\n

Prós:

\n
    \n
  • Alta velocidade — praticamente no nível de cópia direta de memória.
  • \n
  • Obtém imediatamente um ArrayList completo com capacidade de modificação.
  • \n
  • É possível definir a capacidade inicial da lista.
  • \n
\n\n

Contras:

\n
    \n
  • Código um pouco

Blogs

Book Recommendations