Fundamentos e Operações Essenciais do Java Collections Framework

Introdução ao Java Collections Framework

O Java Collections Framework fornece uma arquitetura unificada para armazenar e manipular grupos de objetos. Diferente dos arrays convencionais, as coleções são dinâmicas, permitindo o redimensionamento automático e oferecendo algoritmos otimizados para busca, ordenação e manipulação de dados.

Manipulação Básica com ArrayList

A classe ArrayList é uma implementação da interface List baseada em um array redimensionável. É ideal para situações onde o acesso aleatório aos elementos é frequente.

import java.util.ArrayList;

public class GerenciadorDeDados {
    public ArrayList criarListaMista() {
        // Criando uma instância de ArrayList sem restrição de tipo (Legacy/Object)
        ArrayList colecao = new ArrayList();
        
        // Adicionando diferentes tipos de dados
        colecao.add("https://www.dev-exemplo.com.br");
        colecao.add(2023.99);
        
        return colecao;
    }
}

Operações de CRUD em Listas Dinâmicas

As listas permitem realizar operações fundamentais como inserção, remoção e atualização de elementos através de índices específicos.

import java.util.ArrayList;
import java.util.Scanner;

public class ProcessadorLista {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList<String> registros = new ArrayList<>();
        
        int quantidade = input.nextInt();
        for(int i = 0; i < quantidade; i++) {
            registros.add(input.next());
        }

        // Removendo o primeiro e o último registro original
        if (!registros.isEmpty()) {
            registros.remove(0); 
            registros.remove(registros.size() - 1);
        }

        // Adicionando novos valores
        registros.add("novo_item_inicio");
        registros.add("novo_item_final");

        // Atualizando um elemento em posição específica (índice 2)
        if (registros.size() > 2) {
            registros.set(2, "valor_modificado");
        }

        // Iteração e exibição
        registros.forEach(item -> System.out.println(item));
    }
}

Diferenciação entre Estruturas de Dados

Dependendo da necessidade de performance ou comportamento (unicidade, ordenação), diferentes implementações devem ser escolhidas:

  • HashSet: Armazena elementos únicos sem garantia de ordem.
  • ArrayList: Acesso rápido por índice, permite duplicatas.
  • LinkedList: Eficiente para inserções e remoções frequentes no meio da lista.
  • HashMap: Armazena pares de chave e valor.
import java.util.*;

public class FabricaColecoes {
    public HashSet<String> gerarSet() {
        HashSet<String> set = new HashSet<>();
        set.add("tecnologia_java");
        return set;
    }

    public ArrayList<String> gerarArrayList() {
        ArrayList<String> list = new ArrayList<>();
        list.add("tecnologia_java");
        return list;
    }

    public HashMap<String, String> gerarMap() {
        HashMap<String, String> mapa = new HashMap<>();
        mapa.put("chave", "tecnologia_java");
        return mapa;
    }
}

Segurança de Tipos com Generics

O uso de Generics garante que uma coleção armazene apenas um tipo específico de dado, evitando erros de ClassCastException em tempo de execução.

import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;

public class ValidadorTipagem {
    public static void main(String[] args) {
        Scanner leitor = new Scanner(System.in);
        List<String> mensagens = new ArrayList<>();

        for(int i = 0; i < 3; i++) {
            mensagens.add(leitor.next());
        }

        for(int i = 0; i < mensagens.size(); i++) {
            System.out.println("Entrada indexada [" + (i + 1) + "]: " + mensagens.get(i));
        }
    }
}

Gerenciamento de Pares Chave-Valor com Map

A interface Map é essencial para mapear chaves exclusivas para valores específicos, funcionando como um dicionário ou índice de busca rápida.

import java.util.HashMap;
import java.util.Map;

public class SistemaCatalogo {
    public static void main(String[] args) {
        Map<String, Double> produtos = new HashMap<>();
        
        // Inserção de dados
        produtos.put("Notebook", 3500.0);
        produtos.put("Smartphone", 1500.0);
        
        // Recuperação de valor específico
        if(produtos.containsKey("Smartphone")) {
            System.out.println("Preço atual: " + produtos.get("Smartphone"));
        }

        // Atualização de valor
        produtos.put("Smartphone", 1450.0);

        // Remoção de entrada
        produtos.remove("Notebook");

        System.out.println("Catálogo atualizado: " + produtos);
    }
}

Conceitos Teóricos

Em Java, qual classe armazena objetos utilizando o conceito de pares chave-valor?

A resposta correta é HashMap (pertencente ao pacote java.util), pois as outras opções como ArrayList e LinkedList implementam a interface List, que foca em sequências ordenadas de elementos isolados.

Tags: java collections-framework ArrayList HashMap generics

Publicado em 6-23 16:30