Como remover apenas um elemento do ArrayList?

Pessoal, tenho um ArrayList que possui 3 elementos, dos quais 2 são repetidos. Desses repetidos quero remover apenas um, como posso fazer isso?

ArrayList<Integer> numeros = new ArrayList<Integer>();
numeros.add(1);
numeros.add(2);
numeros.add(1);
//Remover
numeros.remove(1); // Eu quero que sobre 1 e 2, o outro 1 tem que ser removido sem a cópia.

Cara, existem abordagens sobre o método remove() :

  1. Remoção por index: você passa um int e ele remove o item que estiver naquela posição (baseado em zero).
  2. Remoção por objeto: você passa um objeto do tipo da lista e identifica, através do método equals() o primeiro objeto correspondente e o remove.

Se o que você quer fazer é não deixar o mesmo objeto ser adicionado mais de uma vez na sua lista, procure por HashSet. Acredito que irá lhe ajudar bastante.
Entretanto, se na verdade você quiser realmente remover o segundo “1”, eu (minha opinião), iria pelo remove(int index) e faria numeros.remove(2);.

Espero ter ajudado.

Abs.

1 curtida

O efeito que você está vendo é provavelmente a lista resultante fica [1,1]
Isso acontece pois o método remove é overloaded: ele pode receber o índice a ser excluído (tipo int) ou um objeto a ser excluído (no seu caso Integer).
Quando você escreve o número literal 1, o java vai considerar ele como um int, chamado a versao do método pelo índice.

Para remover o primeiro 1, você poderia usar:
numeros.remove(Integer.valueOf(1));

Ou, se sua intençao é ter uma coleçao de objetos sem elementos repetidos, você pode usar um Set, que faz isso para você automaticamente.

2 curtidas