Programação Orientada a Objetos I
Prof. MSc. Leanderson André
leandersonandre@univille.br
Universidade da Região de Joinville
Listas representam computacionalmente o conceito matemático de sequência.
A api de listas é definida na interface java.util.List.
| Implementação | Descrição |
|---|---|
ArrayList |
Armazena os elementos em um arranjo dinâmico, simulando um arranjo de tamanho variável. |
LinkedList |
Armazena os elementos em nós duplamente encadeados, facilitando o acesso ao primeiro e ao último elemento. |
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>();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);O método add(index,elemento) adiciona o elemento em uma posição específica da lista, deslocando os elementos seguintes.
List<Integer> lista = new ArrayList<>(List.of(1, 2, 3));
lista.add(1,99);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); // 2O método set(index,elemento) substitui o elemento na posição index. O método retorna o elemento substituído.
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)); // 99O 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.
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)); // 3O 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 valorvar 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);// 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();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));
}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);
}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); // IndexOutOfBoundsExceptionConjuntos representam computacionalmente o conceito matemático de conjunto.
A api de conjuntos é definida na interface java.util.Set.
| Implementação | Descrição |
|---|---|
HashSet |
Armazena elementos utilizando uma tabela hash, sem garantir a ordem dos elementos. |
LinkedHashSet |
Armazena elementos utilizando uma tabela hash, preservando a ordem de inserção. |
TreeSet |
Armazena elementos em uma árvore, mantendo-os ordenados. |
Prefira utilizar a interface Hash para declarar variáveis, parâmetros e atributos, deixando a implementação (HashSet) como detalhe da instanciação.
import java.util.Set;
import java.util.HashSet;
// Criação de um conjunto
Set<Integer> conjunto = new HashSet<>();
// Inferência de tipos (variável do tipo HashSet)
var conjunto2 = new HashSet<Integer>();O método add(elemento) adiciona o elemento no conjunto.
Set<Integer> conjunto = new HashSet<>();
conjunto.add(1);
conjunto.add(2);
conjunto.add(3);O método contains(elemento) retorna true se o conjunto contiver o elemento informado e false caso contrário.
Set<Integer> conjunto = new HashSet<>(Set.of(1, 2, 3));
var resultado1 = conjunto.contains(1); // true
var resultado2 = conjunto.contains(10); // falseO método remove(elemento) remove o elemento do conjunto e retorna true se ele existir e for removido, ou false caso contrário.
Set<Integer> conjunto = new HashSet<>(Set.of(1, 2, 3));
var removido = lista.remove(1);
// Retorna a quantidade de elementos
var tamanho = conjunto.size();
// Verifica se a conjunto está vazia
boolean vazio = conjunto.isEmpty();
// Remove todos os elementos da conjunto
conjunto.clear();A estrutura for-each permite percorrer todos os elementos do conjunto, sem garantir uma ordem específica.
Set<Integer> conjunto = new HashSet<>(Set.of(1, 2, 3));
for(var elemento : conjunto){
System.out.println(elemento);
}Conjuntos representam computacionalmente o conceito matemático de funções.
A api de mapas é definida na interface java.util.Map.
| Implementação | Descrição |
|---|---|
HashMap |
Utiliza uma tabela hash, sem garantir a ordem dos elementos. |
LinkedHashMap |
Utiliza uma tabela hash, preservando a ordem de inserção. |
TreeMap |
Utiliza uma árvore, mantendo as chaves ordenadas. |
Prefira utilizar a interface Map para declarar variáveis, parâmetros e atributos, deixando a implementação (HashMap) como detalhe da instanciação.
import java.util.Map;
import java.util.HashMap;
// Criação de uma mapa
// Integer representa o tipo de dados da chave
// String representa o tipo de dados do valor
Map<Integer,String> mapa = new HashMap<>();
// Inferência de tipos (variável do tipo HashMap)
var mapa2 = new HashMap<Integer,String>();O método put(chave,valor) adiciona o elemento no mapa.
Map<Integer,String> mapa = new HashMap<>();
mapa.put(1,"Argentina");
mapa.put(2,"Brasil");
mapa.put(3,"Chile");| Chaves | Valores | |
|---|---|---|
|
1
|
⟶ | Argentina |
|
2
|
⟶ | Brasil |
|
3
|
⟶ | Chile |
O mapa não permite duplicar a chave. Ao adicionar uma chave existente, seu valor é substituído.
Map<Integer,String> mapa = new HashMap<>();
mapa.put(1,"Argentina");
mapa.put(1,"Brasil");
mapa.put(1,"Chile"); | Chaves | Valores | |
|---|---|---|
|
1
|
⟶ | Chile |
O método get(chave) retorna o valor associado a chave. Caso a chave não exista no mapa, o método retorna null.
Map<Integer, String> mapa = new HashMap<>(
Map.of(
1, "Argentina",
2, "Brasil",
3, "Chile"
)
);
var valor = mapa.get(2); // Brasil
var valor2 = mapa.get(99); // nullO método getOrDefault(chave,default) retorna o valor associado à chave. Caso ela não exista no mapa, retorna o valor padrão informado.
Map<Integer, String> mapa = new HashMap<>(
Map.of(
1, "Argentina",
2, "Brasil",
3, "Chile"
)
);
var valor = mapa.getOrDefault(99,"País desconhecido");
// País desconhecido
System.out.println(valor);O método containsKey(chave) verifica se a chave existe no mapa. Retorna true caso existir. Caso contrário retorna false.
Map<Integer, String> mapa = new HashMap<>(
Map.of(
1, "Argentina",
2, "Brasil",
3, "Chile"
)
);
var valor1 = mapa.containsKey(1); // true
var valor2 = mapa.containsKey(2); // falseO método containsValue(valor) verifica se o valor existe no mapa. Retorna true caso existir. Caso contrário retorna false.
Map<Integer, String> mapa = new HashMap<>(
Map.of(
1, "Argentina",
2, "Brasil",
3, "Chile"
)
);
var valor1 = mapa.containsValue("Brasil"); // true
var valor2 = mapa.containsValue("Dinamarca"); // falseO método remove(chave) remove a chave do mapa e retorna o valor associado.
Map<Integer, String> mapa = new HashMap<>(
Map.of(
1, "Argentina",
2, "Brasil",
3, "Chile"
)
);
var valor1 = mapa.remove(2); // Brasil
// Retorna a quantidade de elementos
var tamanho = mapa.size();
// Verifica se a conjunto está vazia
boolean vazio = mapa.isEmpty();
// Remove todos os elementos do mapa
mapa.clear();A estrutura for-each permite percorrer todos os pares(chave,valor) do mapa, sem garantir uma ordem específica.
Map<Integer, String> mapa = new HashMap<>(
Map.of(
1, "Argentina",
2, "Brasil",
3, "Chile"
)
);
// Percorre os pares
for(var par : mapa.entrySet()){
System.out.println(par.getKey());
System.out.println(par.getValue());
}
// Percorre as chaves
for(var chave : mapa.keySet()){
System.out.println(chave);
}
// Percorre os valores
for(var valor : mapa.values()){
System.out.println(valor);
}| Característica | List | Set | Map |
|---|---|---|---|
| Elementos repetidos | Sim | Não | Chaves não |
| Acesso por índice | Sim | Não | Não |
| Associação chave-valor | Não | Não | Sim |
| Ordem dos elementos | Preservada | Depende da implementação | Depende da implementação |
Prof. MSc. Leanderson André
leandersonandre@univille.br
Universidade da Região de Joinville