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