Inicialização de ArrayList em Java em uma linha: segredos e armadilhas

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

ArrayList em uma linha em Java: do iniciante ao profissional



Imagine: você está escrevendo um teste, criando um protótipo ou apenas quer definir rapidamente uma lista de strings. Em Python, isso parece my_list = ["a", "b", "c"]. Em Java… começa a dor de cabeça. Será que é necessário escrever três ou quatro linhas toda vez, chamar add() para cada elemento? Spoiler: não. Neste artigo, vamos analisar todas as formas de inicializar um ArrayList em uma linha, responder às perguntas mais frequentes do Stack Overflow e mostrar qual método escolher dependendo da tarefa. Vamos lá!



Este material é baseado em uma pergunta popular real do Stack Overflow, que reuniu milhares de visualizações. Nós a adaptamos para aprendizado, para que você não apenas copie o código, mas entenda por que ele funciona (ou não funciona).



Por que a inicialização simples é uma dor?



Em Java, existe ArrayList — um array dinâmico. Mas ele não tem um literal embutido para criação com dados, como os arrays (String[] arr = {"a", "b", "c"};). Por isso, iniciantes costumam escrever assim:



ArrayList<String> list = new ArrayList<>();list.add("Java");list.add("Python");list.add("JavaScript");


Isso funciona, mas ocupa 4 linhas. E se forem 10 elementos? 100? Queremos algo mais compacto. Vamos analisar todas as formas legais e não tão legais de fazer isso em uma linha.



Método 1: Clássico — Arrays.asList()



O método mais popular que você encontrará nas respostas do Stack Overflow:



ArrayList<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));


Aqui, primeiro criamos uma lista de tamanho fixo com Arrays.asList() e depois a passamos para o construtor do ArrayList. O resultado é uma lista mutável completa. Você pode adicionar, remover e modificar elementos.



Importante: O próprio Arrays.asList() não retorna um ArrayList! Ele retorna sua própria implementação interna de lista de tamanho fixo. Se você tentar chamar add() no resultado de Arrays.asList(), receberá um UnsupportedOperationException. Lembre-se disso — esta é a pergunta mais comum em entrevistas e tópicos do Stack Overflow.



Quando usar?

  • Quando você precisa de uma lista mutável.
  • Quando você está trabalhando com Java 7 ou inferior (antes do Java 9).


Método 2: Java 9+ — List.of()



A partir do Java 9, surgiu o método de fábrica List.of():



List<String> immutableList = List.of("a", "b", "c");


Curto, bonito, conciso. Mas há um detalhe: a lista resultante é imutável (immutable). Você não conseguirá adicionar ou remover um elemento. Se tentar, receberá um UnsupportedOperationException.



Se você precisa exatamente de um ArrayList, envolva-o:



ArrayList<String> list = new ArrayList<>(List.of("a", "b", "c"));


Este método é preferível ao Arrays.asList() se você estiver usando Java 9 ou superior, pois List.of() retorna uma lista estruturalmente imutável (não é possível alterar o tamanho), ao contrário de Arrays.asList(), que permite modificar elementos através de set().



Quando usar?

  • Java 9+
  • Precisa de uma sintaxe curta
  • Você não planeja modificar a lista (ou a envolve em um ArrayList)


Método 3: Inicialização dupla (Double Brace) — antipadrão



No Stack Overflow, esse truque aparece com frequência. Ele se parece com isso:



ArrayList<String> list = new ArrayList<>() {{    add("a");    add("b");    add("c");}};


O que está acontecendo aqui? Estamos criando uma classe interna anônima que herda de ArrayLi

Blogs

Book Recommendations