Colecoes

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:

NomeDescrição
VectorUm array redimensionável com sincronização segura
ArrayListUm array redimensionável e indexado mais performático
LinkedListUma 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

Colecoes.java
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);
        }

    }
}
🏆 Sucesso
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:

IMG

Colecoes.java
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);
        }
    }
}
📌 Para fixar
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.

Colecoes.java
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);
        }
    }
}