1. ArrayListaula

Hoje vamos explorar a ArrayListclasse. Esta é a primeira de várias classes conhecidas como coleções . Em Java, as coleções são um tópico tão amplo e útil que toda uma missão do CodeGym é dedicada a elas.

Para entender completamente como as coleções são estruturadas e todas as suas nuances, você precisa primeiro aprender OOP, interfaces, herança, o básico de multithreading e muito mais.

Portanto, hoje vamos nos familiarizar com o tipo mais simples de coleção. Mas em um nível suficientemente profundo para que você entenda como usá-lo e como funciona. Agora então, conheça a ArrayListcoleção .

A história de fundo

Vou começar com um pouco de fundo. Os programadores realmente não gostaram de um aspecto dos arrays: o fato de que seu tamanho não pode ser alterado. E se você precisar armazenar mais três elementos em uma matriz, mas houver apenas uma célula vazia?

A única solução para as limitações de espaço de um array era criar um array muito grande para acomodar todos os elementos que você precisasse armazenar. Mas isso geralmente era um desperdício de memória. Se um array geralmente continha dois ou três elementos, mas havia uma pequena chance de precisar armazenar 100 deles, então era necessário criar um array com capacidade para armazenar 100.

Então, o que os programadores inventaram? Eles escreveram a ArrayListclasse, que fazia o mesmo trabalho que a Arrayclasse, mas era redimensionável.

Classe ArrayList

O nome da ArrayListclasse é formado por duas palavras: Array + List. Arrayé uma matriz e Listé uma lista.

Cada ArrayListobjeto contém uma matriz comum de elementos. Quando você lê elementos de um ArrayList, o objeto os recupera de seu array interno. Quando você escreve elementos, ele os grava no array interno.

A classe ArrayList não possui todas as desvantagens que os arrays possuem. Ele sabe como:

  • Armazenar elementos de um tipo específico
  • Redimensione a lista dinamicamente
  • Adicionar elementos ao final da lista
  • Inserir elementos no início ou no meio da lista
  • Remover elementos de qualquer lugar da lista

Para mais detalhes veja:


2. Criando um ArrayListobjeto

Para criar um ArrayListobjeto, você precisa escrever um código como este:

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

Onde ArrayListé o tipo/classe da coleção, TypeParameteré o tipo dos elementos armazenados na ArrayListcoleção e nameé o nome de uma ArrayList<TypeParameter>variável.

A namevariável tem um tipo genérico. Consiste em dois tipos: o tipo da coleção é indicado primeiro e, em seguida, os colchetes angulares são usados ​​para indicar o tipo dos elementos armazenados na coleção.

Exemplos:

Código Descrição
ArrayList<Integer> list = new ArrayList<Integer>();
Lista de números inteiros
ArrayList<String> list = new ArrayList<String>();
lista de strings
ArrayList<Double> list = new ArrayList<Double>();
Lista de números reais

Ao contrário dos arrays, as coleções não podem armazenar tipos primitivos, apenas tipos de referência . Portanto, se você precisar de uma coleção de ints, use a Integerclasse wrapper.


3. Operações com umArrayList

Inicialmente, o comprimento da lista recém-criada é zero, pois contém 0 elementos. Se você adicionar um elemento à lista, seu comprimento aumentará em 1. Se você remover o elemento adicionado, o comprimento diminuirá de volta para zero.

A tabela a seguir pode ensinar mais sobre os métodos da ArrayListclasse:

Métodos Descrição
void add(Type value)
Adiciona o elemento passado à lista
void add(int index, Type value)
Adiciona um elemento a um local específico na lista.
Type get(int index)
Retorna o elemento cujo índice éindex
void set(int index, Type value)
Atribui valueao elemento cujo índice éindex
Type remove(int index)
Remove o elemento cujo índice é index. Retorna o elemento removido.
Type remove(Type value)
Remove o elemento que você passa para o método. Se houver mais de um desses elementos, o primeiro será removido.
void clear()
Limpa a lista, ou seja, remove todos os elementos da lista.
boolean contains(Type value)
Verifica se a lista contém value.
boolean isEmpty()
Verifica se a lista está vazia ou não. Em outras palavras, se o comprimento da lista é zero.
int size()
Retorna o tamanho da lista, ou seja, o número de elementos da lista.
Type[] toArray(Type[] array)
Retorna um array contendo os elementos da lista.
Você precisa passar o array para o método.

Esses métodos permitem que você faça quase tudo o que quiser com a lista: trocar elementos, adicionar elementos e remover elementos. Você pode limpar a lista com um único comando ou até converter a lista em uma matriz.



4. Comparação de ArrayListeArray

Acho que não podemos evitar a comparação ArrayListe uma matriz.

Existem apenas 4 ações que você pode executar com arrays:

  • Criar uma matriz
  • Obter um elemento por índice
  • Definir um elemento por índice
  • Obter o comprimento da matriz

Aqui estão essas operações como elas se aplicam a um array e a um ArrayList:

Variedade ArrayList
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

Vamos comparar como ArrayListfunciona um array versus como funciona um array. Por exemplo, vamos implementar esta tarefa: "ler 10 strings do teclado e exibi-las na tela na ordem inversa"

Usando Matriz Usando ArrayList
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

A analogia é clara. Tudo é de alguma forma mais curto e claro para arrays. Mas ArrayListtambém não é difícil: para pegar um elemento, usamos o get()método; para alterar um elemento, o set()método; para obter o comprimento da lista, o size()método.

Então, por que os programadores usam a ArrayListclasse?

O ponto principal, é claro, são todos os outros métodos que os arrays comuns não possuem:

  • Adicionar um elemento à lista
  • Adicionar um elemento ao meio da lista
  • Encontrar um elemento na lista
  • Removendo um elemento de uma lista