Listas
Java Collections - List
Uma java.util.List é uma coleção que pode conter elementos duplicados. Uma List
, é as vezes chamada de sequência. Assim como arrays, as listas são indexadas a partir do índice zero (isto é, o índice do primeiro elemento é zero).
Além de ser uma interface que herda definições da Collection
, uma lista fornece métodos para manipular seus elementos utilizando índices além de, manipular um intervalo especificado de elementos, pesquisar elementos e obter um ListIterator
para acessar os elementos.
Conforme estrutura hierárquica da Collections Framework, a interface List
é implementada pelas classes abaixo:
Nome | Descrição |
---|---|
Vector | Um array redimensionável com sincronização segura |
ArrayList | Um array redimensionável e indexado mais performático |
LinkedList | Uma lista encandeada com mais recursos de inserção de elementos |
O código abaixo ilustrará uma estrutura básica para a constituição de uma lista ou qualquer outra coleção escolhida, o que precisamos compreender de forma consistente é que todas as coleções possuem a proposta de oferecer os recursos de: Inclusão, Remoção, Localização, Organização e Iteração diante dos seus elementos.
Listas
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Colecoes {
public static void main(String[] args) {
// tipo da variavel é mais comum ser a interface
// mas o new será baseado na classe correspondente
List linguagens = new ArrayList();
boolean adicionada = linguagens.add("Java");
System.out.println("A linguagem Java foi adicionada na lista? " + adicionada);
linguagens.add("CSharp");
linguagens.add("Python");
adicionada = linguagens.add("Java");
System.out.println("A linguagem Java foi adicionada novamente na lista? " + adicionada);
linguagens.add("JavaScript");
linguagens.add("Go");
linguagens.add("PHP");
linguagens.add(4,"SQL");
//pegadinha
System.out.println("Qual o índice na lista da linguagem Java? " + linguagens.indexOf("Java"));
System.out.println("Qual elemento está localizado no índice 3 (4-1) " + linguagens.get(3));
System.out.println("Qual elemento está localizado no índice 0 " + linguagens.get(0));
boolean removida = linguagens.remove("Java");
System.out.println("A linguagem Java foi removida? " + removida);
// descomente a linha abaixo e execute mais uma vez
// Collections.sort(linguagens);
Object objetoRemovido = linguagens.remove(5);
System.out.println("O objeto removido foi? " + objetoRemovido);
System.out.println("***Listando as Linguagens***");
for(Object linguagem: linguagens){
System.out.println(linguagem);
}
}
}
Se você compreender tudo o que aconteceu nestas poucas linhas, muitos dos seus dilemas do dia-a-dia sobre trabalhar com coleção de dados estarão solucionados.
Lista estilo Fila
Java Collections - Filas
LinkedList é uma estrutura de lista semelhante a ArrayList mas com o aspecto de serem duplamente encadeadas entre si, isso quer dizer que, além dos métodos já explorados, contamos com recursos para a inclusão ou remoção de elementos no início ou final da lista considerando assim também uma simples fila Queue
ou pilha Deque
de elementos
Podemos optar pelo uso de uma lista do tipo linkada ou encadeada quanto precisamos obter informações ou aspectos relacionados a sequência dos elementos em uma coleção, exemplo:
public class Colecoes {
public static void main(String[] args) {
//LinkedList é tanto um: List, Queue e Deque
Queue candidatos = new LinkedList();
candidatos.add("Gleyson");
candidatos.add("Julia");
candidatos.add("Izabelly");
candidatos.add("Carlos");
imprimirCandidatos(candidatos);
// recupera MAS não remove da Fila
Object proximo = candidatos.peek();
System.out.println("O proximo candidato é: " + proximo);
// recupera E remove da Fila
proximo = candidatos.poll();
System.out.println("O candidato " + proximo + " entrou na sala de entrevistas");
imprimirCandidatos(candidatos);
}
// não se assuste com o nível de abstração, em breve você vai entender
static void imprimirCandidatos(Collection candidatos){
System.out.println("***Listando os candidatos***");
for(Object candidato: candidatos){
System.out.println(candidato);
}
}
}
Percebemos no código acima a finalidade dos métodos
peek
e pool
, mas porque a interface Queue
ainda disponibiliza os métodos element
e remove
?Pilhas
O uso de pilha Deque
é recomendada quando precisamos redefinir a ordem dos elementos com base nas extremidades inicial ou final de uma coleção. Considerando o mesmo cenário de uma lista de candidatos conforme acima iremos ilustrar dois dos aspectos mais relevantes para se usar pilha.
import java.util.*;
public class Colecoes {
public static void main(String[] args) {
//LinkedList é tanto um: List, Queue e Deque
Deque candidatos = new LinkedList();
candidatos.add("Gleyson");
candidatos.add("Julia");
candidatos.add("Izabelly");
candidatos.add("Carlos");
candidatos.addFirst("Dona Benedita");
imprimirCandidatos(candidatos);
// recupera MAS não remove da Fila
Object proximo = candidatos.peekFirst();
System.out.println("O proximo candidato é: " + proximo);
Object desistente = candidatos.removeLast();
System.out.println("O ultimo candidato " + desistente + " desistiu da entrevista" );
// recupera E remove da Fila
proximo = candidatos.poll(); // herdou de Queue
System.out.println("O candidato " + proximo + " entrou na sala de entrevistas");
imprimirCandidatos(candidatos);
}
// não se assuste com o nível de abstração, em breve você vai entender
static void imprimirCandidatos(Collection candidatos){
System.out.println("***Listando os candidatos***");
for(Object candidato: candidatos){
System.out.println(candidato);
}
}
}