Coleções
Definição
Listas
As listas são coleções de objetos onde é possível adicionar elementos repetidos e a ordem importa. A lista é relacionado com a sequência da matemática.
O Java possui a interface List para definir a estrutura de dados das listas e possui implementações de alguns tipos de listas, entre eles o ArrayList, LinkedList e Vector.
O ArrayList é a estrutura mais comum onde os elementos são armazenados dentro de um arranjo.
Criação da Lista
A lista pode ser definida através de uma variável do tipo List. As coleções do Java utilizam tipos genéricos, portanto é preciso indicar qual o tipo de dados que será armazenado na lista. Para este fim, se utiliza o operador diamante <> para indicar o tipo de dados.
A instanciação da List deve ser feito através do tipo concreto, ou seja, a classe ArrayList.
// Criação de uma lista
List<Integer> lista = new ArrayList<Integer>();
// Cria um arraylist com um arranjo de tamanho 200 para guardar os elementos.
List<Integer> lista = new ArrayList<Integer>(200);
// Pode ser utilizado a inferência de tipos,
// porém o tipo de dados da variável é ArrayList
var lista = new ArrayList<Integer>();Adicionar elementos
O método add(elemento) sempre adiciona no final da lista.
var lista = new ArrayList<Integer>();
lista.add(1);
lista.add(2);
lista.add(3);O método add(index,elemento) adiciona o elemento na posição index. Caso a posição não exista, uma exceção é lançada.
var lista = new ArrayList<Integer>();
lista.add(1,99);Obter um elemento pela posição
O método get(index) retorna o elemento na posição index. Caso a posição não exista, uma exceção é lançada.
var lista = new ArrayList<Integer>();
lista.get(1);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. Caso a posição não exista, uma exceção é lançada.
var lista = new ArrayList<Integer>();
var substituido = lista.set(1,99);Remover elementos
O método remove(index) remove o elemento na posição index. O método retorna o elemento removido. Caso a posição não exista, uma exceção é lançada.
var lista = new ArrayList<Integer>();
var removido = lista.remove(99);Métodos úteis
O List fornece uma gama de métodos uteis, tais como size, clear, contains entre outros.
var lista = new ArrayList<Integer>();
// Verifica se possui um elemento -
// true -> se possuir o elemento
// false -> se não possuir o elemento
var contem = list.contains(99);
// Localiza o índice do elemento
// Retorna -1 caso não encontrar o elemento na lista
var indice = list.indexOf(99);
// Retorna o índice do último elemento 99
var indice = list.lastIndexOf(99);
// tamanho da lista
var tamanho = list.size();
// Verificar se a lista está vazia
boolean vazio = list.isEmpty();
// Limpar a lista / remover todos os elementos
list.clear();Percorrer a lista
A lista pode ser percorrida através da estrutura de repetição clássica com índices.
var lista = new ArrayList<Integer>();
for(var i = 0; i < lista.size(); i++){
System.out.println(lista.get(i));
}A estrutura for-each pode ser utilizada para percorrer a lista. Esta estrutura sempre percorre do primeiro elemento até o último. Neste tipo de repetição, o índice não é conhecido.
var lista = new ArrayList<Integer>();
for(var e : lista){
System.out.println(e);
}Conjuntos
Os conjuntos são coleções de objetos em que não é permitido adicionar elementos repetidos e a ordem dos elementos não é garantida. A coleção conjunto funciona de forma semelhante aos conjuntos da matemática.
O Java possui a interface Set para definir a estrutura de dados dos conjuntos e possui implementações de alguns tipos de conjuntos, entre eles o HashSet, EnumSet, LinkedSet e TreeSet.
O HashSet é a estrutura mais comum onde os elementos são armazenados dentro de um mapa.
Criação de um conjunto
Um conjunto pode ser definido por meio de uma variável do tipo Set. A instanciação do conjunto deve ser feito através do tipo concreto, ou seja, a classe HashSet.
Set<Integer> conjunto = new HashSet<Integer>();
var conjunto = new HashSet<Integer>();Adicionar elementos
O método add(elemento) adiciona o elemento no conjunto. O elemento é descartado caso já existir no conjunto.
var conjunto = new HashSet<Integer>();
conjunto.add(1);
conjunto.add(2);
conjunto.add(3);Verificar se um elemento existe
O método contains(elemento) verifica se o elemento existe no conjunto. Caso existir, retorna true. Caso contrário, retorna false.
var conjunto = new HashSet<Integer>();
var existe = conjunto.contains(1);Remover elementos
O método remove(elemento) remove o elemento no conjunto. O método retorna true se o elemento existia no conjunto e foi removido. Caso contrário, retorna false.
var conjunto = new HashSet<Integer>();
var foiRemovido = conjunto.remove(1);Métodos úteis
O conjunto fornece uma gama de métodos uteis, tais como size, clear entre outros.
var conjunto = new HashSet<Integer>();
// Verificar o tamanho
conjunto.size();
// Verificar se está vazio
var estaVazio = conjunto.isEmpty();
// Remover todos os elementos
conjunto.clear();Percorrer o conjunto
O conjunto não possui o conceito de posições ou sequência dos elementos. Para percorrer os elementos de um conjunto, utiliza-se um Iterator.
var conjunto = new HashSet<Integer>();
conjunto.add(1);
conjunto.add(10);
conjunto.add(100);
for(var e : conjunto){
System.out.println(e);
}Mapas
Os mapas são coleções de objetos em que uma chave é utilizada para associar um determinado valor. A coleção mapa funciona de forma semelhante aos dicionários.
O Java possui a interface Map para definir a estrutura de dados dos mapas e disponibiliza implementações de diferentes tipos de mapas, entre elas HashMap, LinkedHashMap e TreeMap.
O HashMap é a implementação mais comum, em que os elementos são armazenados em uma estrutura baseada em tabela hash.
Criação de um mapa
O mapa possui dois tipos genéricos. O K representa o tipos de dados da chave e o V representa o tipo de dados do valor.
// Map<K,V>
Map<Integer,String> mapa = new HashMap<Integer,String>();
var mapa = new HashMap<Integer,String>();