Introdução

Quase todo programa precisa armazenar algum conjunto de dados. Podem ser strings e números, objetos e assim por diante. Arrays são uma excelente solução de armazenamento. Mas as matrizes têm certas limitações. Por exemplo, seu tamanho é fixo, os elementos não podem ser removidos e você não pode inserir elementos no meio. As coleções foram criadas para contornar essas e outras limitações. Todos os tipos de coleções (e existem muitos deles, como veremos mais adiante nesta lição) têm a capacidade de se redimensionar dinamicamente. Alguns tipos de coleção podem armazenar elementos ordenados e colocar automaticamente novos elementos em ordem à medida que são adicionados.

Nesta lição, conheceremos a hierarquia de classes das coleções base no Java Collections Framework . Existem também várias bibliotecas alternativas que estendem os recursos do Java Collections Framework padrão . O mais popular deles é o Guava (Google Collections Library).

*Nem todas as interfaces e classes estão representadas no diagrama. Alguns foram omitidos para facilitar a compreensão.

Interfaces básicas

O diagrama mostra que existem duas interfaces básicas implementadas para formar o restante das classes e interfaces.

Vamos dar uma olhada nessas interfaces:

  1. Coleção — Uma coleção comum que contém um conjunto de elementos (objetos). Essa coleção possui métodos básicos para trabalhar com elementos: inserir ( add , addAll ), remover ( remover , removerAll , limpar ), pesquisar ( contém , contémAll ), verificar se a coleção está vazia ( isEmpty ) e obter tamanho ( size ).

  2. Map — Uma coleção estruturada como pares chave-valor. Além disso, cada chave em um mapa é única: não há duas chaves com valores idênticos. Essa coleção às vezes é chamada de dicionário . Mapa é uma interface separada. Ele não implementa a interface Collection , mas faz parte do Java Collections Framework .

Métodos úteis para trabalhar com elementos em um Mapa :

  • inserir ( colocar , colocarTudo )

  • get ( get , keySet , valores , entrySet )

  • remover ( remover , limpar )

  • pesquisa ( contémChave , contémValor )

  • verifique se a coleção está vazia ( isEmpty )

  • obter tamanho ( tamanho )

Agora vamos falar mais sobre cada um deles.

interface de coleção

A interface Collection estende a interface Iterable , que possui um único método: iterator() . Para nós, isso significa que qualquer coleção que herdar Iterable poderá retornar um iterador.

Um iterador é um objeto especial que você pode usar para acessar os elementos de qualquer coleção, independentemente de sua implementação específica.

A figura mostra que 3 interfaces herdam a interface Collection : List , Queue e Set . Agora veremos cada um deles brevemente.

List é uma coleção ordenada que permite valores duplicados. Uma particularidade de uma Lista é que seus elementos são numerados e podem ser acessados ​​por número (índice).

Uma fila armazena elementos na ordem em que foram adicionados à fila.

Ao contrário de uma lista, um Set representa uma coleção não ordenada que não permite elementos repetidos. A interface Set corresponde ao conceito de um conjunto matemático .

Implementações da interface do mapa

Podemos ver que a interface Map representa um mapeamento entre chaves e valores exclusivos.


interface Map<K, V>

onde K é o tipo das chaves e V é o tipo dos valores armazenados.

Usando uma chave, podemos extrair dados de um Map . Para adicionar um elemento a um Map , devemos especificar uma chave e um valor.

Vejamos algumas implementações de Map :

  1. HashMap é uma implementação de Map baseada em tabelas de hash. Ele pode armazenar chaves e valores de qualquer tipo, incluindo null . A ordem dos elementos não é garantida.

  2. LinkedHashMap é uma estrutura de dados que armazena dados como uma lista encadeada de elementos. Os elementos aparecem na lista na ordem em que foram adicionados.

  3. TreeMap implementa a interface SortedMap (através da interface NavigableMap ). Os elementos dessa estrutura são armazenados em ordem de classificação (quando um novo elemento é adicionado, a coleção é classificada automaticamente). O TreeMap é ótimo para armazenar grandes quantidades de dados classificados com recuperação rápida.

Coleções desatualizadas:

Java possui coleções obsoletas de versões anteriores (para manter a compatibilidade com versões anteriores). Essas coleções antigas não devem ser usadas no novo código:

  • Enumeração — análoga à interface Iterator ;

  • Vector — uma lista ordenada de elementos e análoga à classe ArrayList ;

  • Pilha — uma implementação da estrutura de dados de pilha, que armazena e manipula elementos como você interagiria com uma pilha de livros. Existem métodos para adicionar elementos à pilha ( push ) e retirá-los ( pop );

  • Dictionary — análoga à interface Map , mas é uma classe abstrata;

  • Hashtable — análogo a HashMap .

Você pode ler mais sobre o Collections Framework neste artigo .