Apidog

Plataforma Colaborativa All-in-one para Desenvolvimento de API

Design de API

Documentação de API

Depuração de API

Mock de API

Testes Automatizados de API

Principiantes, atenção! Fundamentos e uso de Listas e Arrays em Java

Miguel Oliveira

Miguel Oliveira

Updated on dezembro 18, 2024

Uma das estruturas de dados em Java, o List, é um tipo de coleção muito conveniente e frequentemente utilizado. Embora desempenhe um papel semelhante ao de um array (Array), oferece muitas vantagens em termos de redimensionamento e manipulação de dados. Neste artigo, explicaremos os conceitos básicos e o uso do List, além das principais classes de implementação, de forma clara para que até os iniciantes possam entender.

💡
Aprender os fundamentos do Java e da manipulação de listas é o primeiro passo para aprimorar suas habilidades em programação. No entanto, em desenvolvimento real, testes e gerenciamento de APIs são essenciais. É aí que o Apidog pode ajudar!
Apidog é uma ferramenta que facilita a automação de testes de API, permitindo gerenciar de forma eficiente a manipulação de listas e o processamento de dados. Em particular, permite uma troca de dados precisa e testes sem costura, integrando-se à API de aplicativos desenvolvidos em Java. Com testes automatizados, os desenvolvedores podem economizar tempo e se concentrar na melhoria da qualidade do produto.
Baixe agora o Apidog e torne o desenvolvimento de APIs ainda mais eficiente, oferecendo serviços de alta qualidade rapidamente!
button

Conceito de List

O List é uma coleção ordenada que pode armazenar elementos duplicados. Além disso, cada elemento do List possui um índice (ou subscript) associado, permitindo o acesso mantendo a ordem. Em geral, a diferença em relação a um array (Array) é que o List pode ter seu tamanho alterado dinamicamente, proporcionando maior flexibilidade.

Os arrays têm seu tamanho determinado na declaração e não podem ser alterados posteriormente, enquanto o List permite a adição e remoção de elementos conforme necessário. Essa característica é uma grande vantagem do uso do List.

Classes de Implementação do List

O List é uma interface e existem várias classes de implementação concretas. Na biblioteca padrão do Java, ArrayList e LinkedList são as classes de implementação mais representativas. Essas classes implementam a interface List e possuem os mesmos métodos, mas suas estruturas de dados internas são diferentes.

java-list

ArrayList

O ArrayList utiliza um array dinâmico internamente, permitindo que a adição de elementos e o acesso por índice sejam muito rápidos. No entanto, a remoção e inserção de elementos podem ter um custo. Especialmente, ao inserir elementos no meio da lista, é necessário deslocar os elementos existentes, o que pode diminuir o desempenho.

java-ArrayList

Exemplo de Uso:

ArrayList<String> list = new ArrayList<>();
list.add("Maçã");
list.add("Banana");
list.add("Cereja");

System.out.println(list.get(0));  // Maçã

LinkedList

O LinkedList utiliza uma lista encadeada (onde cada elemento mantém referências aos elementos anteriores e posteriores). Por isso, a remoção e inserção de elementos são eficientes, mas o acesso por índice é mais lento. Em particular, operações no início ou no final da lista são rápidas.

java-LinkedList

Exemplo de Uso:

LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Cachorro");
linkedList.add("Gato");
linkedList.add("Coelho");

System.out.println(linkedList.get(1));  // Gato

Uso Básico do List

Ao utilizar o List, é útil lembrar algumas operações básicas. Aqui, apresentaremos métodos de inicialização do List, adição, recuperação e remoção de elementos.

button

Inicialização

A inicialização do List é simples e pode ser descrita da seguinte forma.

Exemplo de Uso:

List<String> list = new ArrayList<>();

Além disso, é possível adicionar alguns elementos durante a inicialização.

Exemplo de Uso:

List<String> list = Arrays.asList("Um", "Dois", "Três");

Adição de Elementos

Para adicionar elementos, utiliza-se o método add().

Exemplo de Uso:

List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");

Substituição de Elementos

Usando o método set(), é possível substituir o elemento em um índice específico.

Exemplo de Uso:

list.set(1, "C++");

Recuperação de Elementos

Usando o método get(), é possível recuperar elementos especificando o índice.

Exemplo de Uso:

String language = list.get(0);  // "Java"

Remoção de Elementos

Usando o método remove(), é possível remover um elemento especificado.

Exemplo de Uso:

list.remove(0);  // Remove "Java"

Métodos Utilizáveis com List

O List possui vários métodos úteis além da adição, remoção e recuperação de elementos. Abaixo estão alguns dos métodos frequentemente utilizados.

Ordenação de Elementos

Usando o método Collections.sort(), é possível ordenar os elementos da lista.

Exemplo de Uso:

Collections.sort(list);

Processamento de Cada Elemento do List

Usando o método forEach(), é possível realizar operações em cada elemento da lista.

Exemplo de Uso:

list.forEach(element -> System.out.println(element));

Operações Avançadas do List

O List não apenas armazena elementos, mas também permite realizar várias operações. Por exemplo, é possível unir listas, buscar elementos, criar uma lista invertida, entre outras aplicações.

Ordenação de Elementos

Ao ordenar os elementos da lista, o Collections.sort() pode ser utilizado para facilitar a ordenação.

Exemplo de Uso:

List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6);
Collections.sort(numbers);
System.out.println(numbers);  // [1, 1, 2, 3, 4, 5, 6, 9]

União de Listas

Usando o método addAll(), é possível unir duas listas.

Exemplo de Uso:

List<String> list1 = new ArrayList<>(Arrays.asList("Maçã", "Banana"));
List<String> list2 = new ArrayList<>(Arrays.asList("Cereja", "Data"));
list1.addAll(list2);
System.out.println(list1);  // [Maçã, Banana, Cereja, Data]

Inversão de Listas

Usando Collections.reverse(), é possível inverter a ordem da lista.

Exemplo de Uso:

List<String> list = new ArrayList<>(Arrays.asList("Um", "Dois", "Três"));
Collections.reverse(list);
System.out.println(list);  // [Três, Dois, Um]

Diferenças entre List e Array

O List e o array (Array) são usados para armazenar múltiplos dados, mas existem algumas diferenças importantes.

  • Redimensionamento: Arrays têm tamanho fixo e não podem ser redimensionados. Por outro lado, o List pode ter seu tamanho alterado dinamicamente.
  • Tipo de Elementos: Arrays só podem armazenar dados do mesmo tipo, enquanto o List pode lidar com elementos de tipos diferentes usando generics.
  • Métodos: Arrays não possuem métodos, mas o List oferece muitos métodos úteis para adicionar, remover, recuperar e buscar elementos.
button

Perguntas Frequentes (FAQ)

1: Quais são as diferenças entre o List e o Array em Java?

Resposta:
A principal diferença entre List e array é a flexibilidade de redimensionamento. Arrays têm tamanho fixo, enquanto List pode alterar seu tamanho dinamicamente. Isso facilita a adição e remoção de dados.

Exemplo de Código:

// Exemplo de Array
int[] arr = new int[5]; // Tamanho fixo do array
arr[0] = 10;
arr[1] = 20;

// Exemplo de List
List<Integer> list = new ArrayList<>();
list.add(10);  // Tamanho pode ser alterado
list.add(20);

Explicação:
No código acima, o array arr é declarado inicialmente com tamanho 5 e não pode ser redimensionado. Por outro lado, o list utilizando ArrayList altera seu tamanho dinamicamente a cada adição de elemento.

2: Quais são as diferenças entre ArrayList e LinkedList?

Resposta:
O ArrayList tem acesso por índice rápido, mas a adição e remoção de elementos podem ser demoradas. Por outro lado, o LinkedList é eficiente na adição e remoção de elementos, mas o acesso por índice é mais lento.

Exemplo de Código:

// ArrayList
List<Integer> arrayList = new ArrayList<>();
arrayList.add(10);
arrayList.add(20);
System.out.println("Primeiro elemento do ArrayList: " + arrayList.get(0));

// LinkedList
List<Integer> linkedList = new LinkedList<>();
linkedList.add(10);
linkedList.add(20);
System.out.println("Primeiro elemento do LinkedList: " + linkedList.get(0));

Explicação:
O ArrayList e o LinkedList implementam a interface List, mas sua estrutura interna é diferente. O ArrayList se baseia em um array, proporcionando acesso muito rápido por índice. O LinkedList se baseia em uma lista duplamente encadeada, sendo eficiente para adições e remoções, mas mais lento para acesso por índice.

3: Como posso ordenar os elementos de um List?

Resposta:
Para ordenar os elementos de um List, utilize o método Collections.sort(). Por padrão, os elementos dentro da lista são ordenados em ordem natural.

Exemplo de Código:

import java.util.*;

public class ListSortExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(30);
        list.add(10);
        list.add(20);
        
        // Ordenando o List
        Collections.sort(list);
        
        // Exibindo a lista após a ordenação
        System.out.println("Lista após ordenação: " + list);
    }
}

Explicação:
O Collections.sort() ordena os elementos da lista em ordem crescente. No exemplo acima, adicionamos os inteiros 30, 10 e 20 ao ArrayList e o ordenamos usando Collections.sort(). O resultado exibido será [10, 20, 30].

button

Resumo

O List em Java é uma classe de coleção extremamente flexível e fácil de usar, apresentando muitas vantagens sobre os arrays. Ao utilizar classes de implementação como ArrayList e LinkedList, é possível realizar diversas operações de dados de acordo com diferentes situações. Mesmo iniciantes, ao entenderem o uso básico, poderão manipular dados de forma mais eficiente.