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).
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:
-
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 ).
-
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 :
-
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.
-
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.
-
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 .
GO TO FULL VERSION