A Classe ArrayList em Java
As Collections são estruturas de dados pré-definidas, fornecidas pela API do Java, que são empregadas para armazenar grupos de objetos relacionados na memória durante a execução do programa. Com estas classes é possível organizar, armazenar e ler dados sem a necessidade de saber exatamente como os dados são armazenados (encapsulamento).
Um array convencional não tem seu tamanho modificado automaticamente durante a execução do programa, por exemplo para armazenar novos elementos, o que pode ser um problema, principalmente se surge a necessidade de armazenar mais elementos após um array estar completo.
O framework Collections em Java fornece diversas interfaces e classes para manipulação de grupos de objetos, como por exemplo:
- Interfaces
- List
- Set
- Queue
- Deque
- SortedSet
- Classes
- ArrayList
- LinkedList
- Vector
- HashSet
- PriorityQueue
- LinkedHashSet
- TreeSet
Nesta lição vamos iniciar o estudo das Collections com a classe ArrayList.
Classe ArrayList
A classe de coleção (collections class) ArrayList<T>, pertencente ao pacote java.util, e que implementa a interface List, resolve o problema de modificação do tamanho de um array em tempo de execução, pois ela pode mudar seu tamanho de forma dinâmica – ou seja, permite criar um array dinâmico. A letra T indica um placeholder, que é substituído ao declarar um ArrayList pelo tipo de elementos que a estrutura irá armazenar.
Suponha que desejemos criar um ArrayList de strings, de nome produtos. Para tal, executamos a seguinte declaração:
ArrayList<String> produtos;
Note que somente tipos não-primitivos podem ser usados para declarar variáveis e criar objetos em classes genéricas – e o ArrayList é uma classe genérica. Ainda assim, em Java é possível usar tipos primitivos, desde que empacotados como se fossem objetos, em um processo denominado boxing. Desta forma, poderíamos criar um ArrayList de inteiros também, por exemplo:
ArrayList<Integer> numeros;
Ao ler um valor deste ArrayList o elemento (valor inteiro) é desempacotado (processo de unboxing).
Métodos principais de um ArrayList
A seguir listamos os principais métodos fornecidos por uma classe ArrayList:
- Método add – Adiciona um elemento no final do ArrayList.
- Método clear – Remove todos os elementos da estrutura.
- Método contains – Verifica se o ArrayList contém um elemento especificado, e retorna true em caso positivo, ou false caso contrário.
- Método get – Retorna o item em uma posição de índice especificada.
- Método indexOf – Retorna a posição de índice da primeira ocorrência de um elemento especificado.
- Método remove – Remove a primeira ocorrência de um valor especificado ou de um elemento em um índice.
- Método size – Informa o número de elementos que estão armazenados na estrutura.
- Método trimToSize – Ajusta a capacidade do ArrayList de acordo com o número de elementos armazenados no momento.
Exemplo
Vejamos um exemplo de uso de ArrayList.
import java.util.ArrayList;
public class ListaArrayList {
public static void main(String[] args) {
// Criar um novo ArrayList de Strings com capacidade inicial de 10 elementos (padrão)
ArrayList<String> frutas = new ArrayList<>();
frutas.add("Maçã"); // Adicionar um item à lista
frutas.add(0, "Uva"); // Inserir a fruta Uva na posição de índice 0
System.out.println("Mostrar o conteúdo do ArrayList usando laço for convencional:");
for (int i = 0; i < frutas.size(); i++)
System.out.printf(" %s", frutas.get(i));
// Mostrar as frutas com o método mostrar(). Passamos a lista e um frase-cabeçalho
mostrar(frutas,"%nMostrando a lista de frutas com o método mostrar:");
frutas.add("Tangerina"); // Adicionar tangerina ao final da lista
frutas.add("Morango"); // Idem com Morango
mostrar(frutas, "Nova visualização da lista após adicionar frutas:");
frutas.remove("Uva"); // remover a fruta Uva"
mostrar(frutas, "Nova visualização da lista após remover frutas:");
frutas.remove(1); // Remover item na posição de índice 1
mostrar(frutas, "Remover o segundo elemento da lista (índice 1):");
// Verificar número de elementos na lista
System.out.printf("Tamanho atual do ArrayList: %s itens%n", frutas.size());
// Verificar se um item existe na lista
System.out.printf("A fruta \"Tangerina\" %sestá na lista%n", frutas.contains("Tangerina") ? "": "não ");
}
// criar método para mostrar os elementos do ArrayList frutas
public static void mostrar(ArrayList<String> frutas, String cabecalho) {
System.out.printf(cabecalho); // mostrar cabeçalho
for (String item : frutas)
System.out.printf(" %s", item);
System.out.println();
}
}
Neste exemplo criamos um ArrayList de String chamado de frutas, e adicionamos dois nomes de frutas a ele usando o método add.
Logo após, mostramos o conteúdo do ArrayList iterando pelos seus elementos com um laço for, e lendo cada item com o método get.
Também criamos um método especial para mostrar o conteúdo do ArrayList, de nome mostrar(), que recebe como argumentos o nome do ArrayList e uma mensagem a ser exibida juntamente com os elementos retornados.
Removemos um elemento usando o método remove, e verificamos o seu tamanho com o método size.
Finalmente, verificamos se um item está contido no ArrayList usando o método contains.
Na próxima lição vamos estudar as listas ligadas, implementadas com a classe LinkedList.
