Implementação e Uso de Listas Sequenciais em Java

Definição de Lista Sequencial

Uma lista sequencial é uma estrutura linear que armazena elementos em endereços físicos contíguos, geralmente utilizando arrays. Suas operações básicas incluem inserção, remoção, busca e modificação de elementos.

Implementação Personalizada

Interface da Lista

public interface ListaSequencial {
    void adicionar(int valor);
    void adicionar(int indice, int valor);
    boolean contem(int alvo);
    int buscarIndice(int alvo);
    int obter(int indice);
    void atualizar(int indice, int valor);
    void remover(int valor);
    int tamanho();
    void limpar();
    void exibir();
}

Classe de Implementação

public class MinhaLista implements ListaSequencial {
    private int[] elementos;
    private int tamanhoAtual;
    private int capacidade;

    public MinhaLista() {
        capacidade = 8;
        elementos = new int[capacidade];
    }

    private void expandir() {
        capacidade *= 2;
        elementos = Arrays.copyOf(elementos, capacidade);
    }

    private boolean estaCheia() {
        return tamanhoAtual == capacidade;
    }

    public void adicionar(int valor) {
        if (estaCheia()) expandir();
        elementos[tamanhoAtual++] = valor;
    }

    public void adicionar(int indice, int valor) {
        if (indice < 0 || indice > tamanhoAtual) return;
        if (estaCheia()) expandir();
        
        for (int i = tamanhoAtual; i > indice; i--) {
            elementos[i] = elementos[i-1];
        }
        elementos[indice] = valor;
        tamanhoAtual++;
    }

    public boolean contem(int alvo) {
        for (int i = 0; i < tamanhoAtual; i++) {
            if (elementos[i] == alvo) return true;
        }
        return false;
    }

    public int buscarIndice(int alvo) {
        for (int i = 0; i < tamanhoAtual; i++) {
            if (elementos[i] == alvo) return i;
        }
        return -1;
    }

    public int obter(int indice) {
        if (indice < 0 || indice >= tamanhoAtual) return -1;
        return elementos[indice];
    }

    public void atualizar(int indice, int valor) {
        if (indice < 0 || indice >= tamanhoAtual) return;
        elementos[indice] = valor;
    }

    public void remover(int valor) {
        int pos = buscarIndice(valor);
        if (pos == -1) return;
        
        for (int j = pos; j < tamanhoAtual - 1; j++) {
            elementos[j] = elementos[j+1];
        }
        tamanhoAtual--;
    }

    public int tamanho() {
        return tamanhoAtual;
    }

    public void limpar() {
        tamanhoAtual = 0;
    }

    public void exibir() {
        for (int i = 0; i < tamanhoAtual; i++) {
            System.out.print(elementos[i] + " ");
        }
        System.out.println();
    }
}

ArrayList Padrão do Java

No framwork Collections, ArrayList é uma implemnetação da interface List com estas características:

  • Implementado com generics
  • Suporte a acesso aleatório (RandomAccess)
  • Clonável (Cloneable) e serializável (Serializable)
  • Não é thread-safe (para concorrência use Vector ou CopyOnWriteArrayList)
  • Armazenamento contíguo com redimensionamento dinâmico

Utilização do ArrayList

Construtores

List<String> lista1 = new ArrayList<>(); // Lista vazia
List<Integer> lista2 = new ArrayList<>(15); // Capacidade inicial 15
List<Double> lista3 = new ArrayList<>(lista2); // Cópia de coleção

Operações Principais

ArrayList<Integer> numeros = new ArrayList<>();
numeros.add(15); // Inserção no final
numeros.add(0, 20); // Inserção por índice
numeros.get(0); // Recuperar elemento
numeros.set(0, 100); // Atualizar elemento
numeros.remove(0); // Remover por índice
numeros.remove(Integer.valueOf(15)); // Remover por valor
numeros.contains(30); // Verificar existência
numeros.indexOf(20); // Buscar posição
numeros.clear(); // Limpar lista

Métodos de Iteração

Via índice:

for (int i = 0; i < numeros.size(); i++) {
    System.out.print(numeros.get(i));
}

For-each:

for (int n : numeros) {
    System.out.print(n);
}

Iterador:

Iterator<Integer> it = numeros.iterator();
while (it.hasNext()) {
    System.out.print(it.next());
}

Tags: java ArrayList estrutura-de-dados Lista-Sequencial

Publicado em 6-27 06:42