Coleções

Programação Orientada a Objetos I


Prof. MSc. Leanderson André

leandersonandre@univille.br


Universidade da Região de Joinville

Coleções

Definição
Estruturas de dados utilizadas para armazenar e manipular grupos de elementos. O Java Collections Framework fornece interfaces e implementações para representar listas, conjuntos, filas e mapas, oferecendo operações como inserção, remoção, busca e iteração.

Java Collections Framework

Java Collections Framework

Listas

Definição
Estruturas de dados que representam sequências de elementos, nas quais a ordem é preservada, elementos podem se repetir e cada elemento possui uma posição.

Listas

Listas representam computacionalmente o conceito matemático de sequência.

10
25
30
45
60
30
-5
Índice 0

Listas

A api de listas é definida na interface java.util.List.

Implementações de Listas

ImplementaçãoDescrição
ArrayListArmazena os elementos em um arranjo dinâmico, simulando um arranjo de tamanho variável.
LinkedListArmazena os elementos em nós duplamente encadeados, facilitando o acesso ao primeiro e ao último elemento.

ArrayList

Prefira utilizar a interface List para declarar variáveis, parâmetros e atributos, deixando a implementação (ArrayList) como detalhe da instanciação.

import java.util.List;
import java.util.ArrayList;

// Criação de uma lista
List<Integer> lista = new ArrayList<>();

// Cria uma lista com capacidade inicial para 200 elementos.
List<Integer> lista2 = new ArrayList<Integer>(200);

// Inferência de tipos (variável do tipo ArrayList)
var lista3 = new ArrayList<Integer>();

Adicionar elementos na lista

O método add(elemento) adiciona o elemento ao final da lista.

List<Integer> lista = new ArrayList<>();

lista.add(1);
lista.add(2);
lista.add(3);
1
2
3

Adicionar elementos na lista

O método add(index,elemento) adiciona o elemento em uma posição específica da lista, deslocando os elementos seguintes.

1
2
3
List<Integer> lista = new ArrayList<>(List.of(1, 2, 3));

lista.add(1,99);
1
99
2
3

Obter um elemento pela posição

O método get(index) retorna o elemento na posição index.

List<Integer> lista = new ArrayList<>(List.of(1, 2, 3));

var elemento = lista.get(1);
System.out.println(elemento); // 2

Atualizar um elemento pela posição

O método set(index,elemento) substitui o elemento na posição index. O método retorna o elemento substituído.

1
2
3
List<Integer> lista = new ArrayList<>(List.of(1, 2, 3));

var substituido = lista.set(1,99);

System.out.println(substituido); // 2
System.out.println(lista.get(1)); // 99
1
99
3

Remover um elemento pela posição

O método remove(index) remove o elemento na posição index e retorna o elemento removido. Os elementos seguintes são deslocados uma posição à esquerda.

1
2
3
List<Integer> lista = new ArrayList<>(List.of(1, 2, 3));

var removido = lista.remove(1);

System.out.println(removido); // 2
System.out.println(lista.get(1)); // 3
1
3

Remoção por elemento

O método remove(elemento) remove a primeira ocorrência do elemento na lista e retorna true se a remoção for realizada. Os elementos seguintes são deslocados uma posição à esquerda.

List<Integer> lista = new ArrayList<>(List.of(1, 2, 3));

lista.remove(1);                  // remove pela posição
lista.remove(Integer.valueOf(1)); // remove pelo valor

Métodos úteis

var lista = new ArrayList<Integer>();

// Verifica se a lista contém o elemento
// Retorna true ou false
var contem = lista.contains(99);

// Retorna o índice da primeira ocorrência
// Retorna -1 caso não encontre o elemento
var indice = lista.indexOf(99);

Métodos úteis

// Retorna o índice da última ocorrência
var indice = lista.lastIndexOf(99);

// Retorna a quantidade de elementos
var tamanho = lista.size();

// Verifica se a lista está vazia
boolean vazio = lista.isEmpty();

// Remove todos os elementos da lista
lista.clear();

Percorrer a lista

A lista pode ser percorrida utilizando a estrutura de repetição for com índices, permitindo acessar cada elemento pela sua posição.

var lista = new ArrayList<Integer>();

for(var i = 0; i < lista.size(); i++){
  System.out.println(lista.get(i));
}

Percorrer a lista

A estrutura for-each permite percorrer todos os elementos da lista, do primeiro ao último, sem a necessidade de utilizar índices.

var lista = new ArrayList<Integer>();

for(var elemento : lista){
  System.out.println(elemento);
}

Acesso a posições inválidas

O acesso a uma posição inexistente da lista provoca a exceção IndexOutOfBoundsException.

Um índice válido deve estar entre 0 e size() - 1.

List<Integer> lista = new ArrayList<>(List.of(10, 20, 30));

// Índice negativo
lista.get(-1); // IndexOutOfBoundsException

// Índice igual ao tamanho da lista
lista.get(3);  // IndexOutOfBoundsException

// Índice maior que o tamanho da lista
lista.get(10); // IndexOutOfBoundsException
Univille

Prof. MSc. Leanderson André

leandersonandre@univille.br


Universidade da Região de Joinville