Adicionar e remover
Em aplicações reais, como uma lista de tarefas ou um carrinho de compras, você frequentemente precisa adicionar e remover itens de uma coleção dinâmica. Saber a diferença entre remover por índice e remover por valor é essencial: um erro comum é tentar remover um número passando um int e acabar removendo o elemento naquela posição, em vez do próprio número. Dominar esses métodos evita bugs difíceis de detectar.
O PROBLEMA
Crie ArrayList de inteiros. Adicione 5 números, remova primeiro por índice e um valor.
EXEMPLO
Original: [1,2,3,4,5] Após: [2,4,5]
SOBRE O CONCEITO
O ArrayList oferece o método add() para inserir elementos e duas versões de remove(): remove(int index) e remove(Object o). A confusão acontece porque, ao passar um valor inteiro literal como 3, o compilador chama remove(int index), removendo o elemento na posição 3, não o objeto 3. Para remover o número como objeto, é necessário usar remove(Integer.valueOf(3)) ou remove((Object)3). No exercício, a lista contém objetos Integer, então o autoboxing pode esconder essa diferença. O erro comum listado é exatamente essa ambiguidade: se você escrever lista.remove(3), estará removendo o quarto elemento (índice 3) e não o valor 3, caso ele exista.
RESOLUÇÃO