1. Adicionando um elemento no meio (ou no início) de uma lista

Se quisermos inserir um elemento no meio da lista, eis o que acontece dentro da lista.

Suponha que temos uma lista de 11 elementos:

Adicionando um elemento no meio (ou no início) de uma lista

Queremos inserir o número 10.000 na lista de índice 5. Para isso, basta executar:

list.add(5, 10000);

Onde listé uma ArrayListvariável. O add(int index, type value)método adiciona o valor 10000 na posição 5 da lista. Aqui está o que acontece no add()método:

Etapa 1: Todos os elementos da matriz, começando na 5ª posição, serão deslocados (copiados) por 1 elemento no final da matriz:

Adicionando um elemento no meio (ou no início) de uma lista 1

Observe que os elementos na 5ª e 6ª célula da matriz agora são os mesmos.

Passo 2: Escreva o valor 10.000 na 5ª célula:

Adicionando um elemento no meio (ou no início) de uma lista 2

Agora a lista contém todos os elementos da matriz e a quinta célula contém o número 10.000. Exatamente o que queríamos.



2. Removendo um elemento de uma lista

Remover um elemento de uma lista é semelhante a inseri-lo, mas o processo é inverso.

Vamos remover o terceiro elemento de uma lista. Para isso, precisamos executar:

list.remove(3);

Aqui está o que acontece no método remove():

Passo 1: Os elementos do array, a partir da 4ª posição, serão deslocados (copiados) por 1 elemento em direção ao início do array:

Removendo um elemento de uma lista

Passo 2: O valor da sizevariável será diminuído em 1.

Removendo um elemento de uma lista 2

Observe que existem alguns valores em cinza no final da matriz. Tecnicamente, estes são lixo. Eles precisam ser removidos para não interferir na coleta de lixo .

Passo 3: Limpando o lixo

Removendo um elemento de uma lista 3



3. Exemplos práticos de como trabalhar com uma lista em Java

Vamos escrever alguns exemplos de como trabalhar com listas:

Vamos listar todos os números pares no intervalo de 1 a 20:

Código Notas
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);
Criar um objeto de lista

Percorrer todos os índices 1até 20
Se o índice for divisível por 2sem resto,
adicioná-lo à lista

Agora vamos exibir todos os elementos da lista na tela:

Código Notas
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

for (int i = 0; i < list.size(); i++)
   System.out.println(list.get(i));
Criar um objeto de lista
Percorrer todos os índices 1até 20

Se o número for divisível por 2sem resto,
adicioná-lo à lista

Percorrer de zero até o tamanho da lista
Exibir cada elemento na tela

Removendo elementos:

Agora vamos remover todos os elementos que são divisíveis por 4. Observe que após remover um elemento da lista, as posições dos elementos restantes mudam imediatamente.

Código Notas
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

for (int i = 0; i < list.size(); i++)
   if (list.get(i)%4 == 0)
   {
      list.remove(i);
      i--;
   }
Criar um objeto de lista

Percorrer todos os índices 1até 20
Se o índice for divisível por 2sem resto,
adicioná-lo à lista

Percorrer de zero até o tamanho da lista
Se um elemento da lista for divisível por 4sem resto:

a) remover o elemento
b) diminua o icontador para obtermos o mesmo índice na próxima iteração do loop

Digamos que você precise remover os últimos 3 elementos de uma lista.

Veja como fazer isso incorretamente:

Código Notas
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

int n = list.size();
list.remove(n - 3);
list.remove(n - 2);
list.remove(n - 1);
Criar um objeto de lista

A lista tem 10 elementos: 2, 4, 6, ... 20



n = 10
n - 3 = 7(restam 9 elementos na lista)
n - 2 = 8(restam 8 elementos na lista)
n - 1 = 9(restam 7 elementos na lista)

Depois de remover o 7º e 8º elementos, apenas 8 elementos permanecerão na lista. Isso significa que não será possível excluir o 9º elemento — ocorrerá um erro no programa.

Aqui está a maneira correta de remover os elementos:

Opção 1 opção 2
int n = list.size();
list.remove(n - 3);
list.remove(n - 3);
list.remove(n - 3);
int n = list.size();
list.remove(n - 1);
list.remove(n - 2);
list.remove(n - 3);

Os elementos precisam ser removidos da extremidade ou de outro local consistente, pois os elementos são deslocados um após cada operação de remoção.