Java - Estrutura de coleções

Antes do Java 2, o Java fornecia classes ad hoc, como Dictionary, Vector, Stack, e Propertiespara armazenar e manipular grupos de objetos. Embora essas classes fossem bastante úteis, faltava um tema central e unificador. Portanto, a maneira como você usou o Vector foi diferente da maneira como você usou as Propriedades.

A estrutura de coleções foi projetada para atender a vários objetivos, tais como -

  • A estrutura tinha que ser de alto desempenho. As implementações para as coleções fundamentais (matrizes dinâmicas, listas vinculadas, árvores e tabelas de hash) deveriam ser altamente eficientes.

  • A estrutura precisava permitir que diferentes tipos de coleções funcionassem de maneira semelhante e com um alto grau de interoperabilidade.

  • A estrutura teve que estender e / ou adaptar uma coleção facilmente.

Para esse fim, toda a estrutura de coleções é projetada em torno de um conjunto de interfaces padrão. Várias implementações padrão, comoLinkedList, HashSet, e TreeSet, dessas interfaces são fornecidas para que você possa usar no estado em que se encontra e também pode implementar sua própria coleção, se desejar.

Uma estrutura de coleções é uma arquitetura unificada para representar e manipular coleções. Todas as estruturas de coleções contêm o seguinte -

  • Interfaces- Esses são tipos de dados abstratos que representam coleções. As interfaces permitem que as coleções sejam manipuladas independentemente dos detalhes de sua representação. Em linguagens orientadas a objetos, as interfaces geralmente formam uma hierarquia.

  • Implementations, i.e., Classes- Estas são as implementações concretas das interfaces de coleção. Em essência, eles são estruturas de dados reutilizáveis.

  • Algorithms- Esses são os métodos que realizam cálculos úteis, como pesquisa e classificação, em objetos que implementam interfaces de coleção. Os algoritmos são considerados polimórficos: ou seja, o mesmo método pode ser usado em muitas implementações diferentes da interface de coleção apropriada.

Além das coleções, a estrutura define várias interfaces e classes de mapas. Os mapas armazenam pares de chave / valor. Embora os mapas não sejam coleções no uso adequado do termo, eles estão totalmente integrados às coleções.

As interfaces da coleção

A estrutura de coleções define várias interfaces. Esta seção fornece uma visão geral de cada interface -

Sr. Não. Interface e descrição
1 A interface da coleção

Isso permite que você trabalhe com grupos de objetos; está no topo da hierarquia de coleções.

2 A interface da lista

Isso estende Collection e uma instância de List armazena uma coleção ordenada de elementos.

3 O conjunto

Isso estende a coleção para lidar com conjuntos, que devem conter elementos exclusivos.

4 O SortedSet

Isso estende Set para lidar com conjuntos classificados.

5 O mapa

Isso mapeia chaves exclusivas para valores.

6 The Map.Entry

Isso descreve um elemento (um par chave / valor) em um mapa. Esta é uma classe interna de Map.

7 O SortedMap

Isso estende o mapa para que as chaves sejam mantidas em ordem crescente.

8 A Enumeração

Esta é uma interface legada que define os métodos pelos quais você pode enumerar (obter um por vez) os elementos em uma coleção de objetos. Esta interface legada foi substituída pelo Iterator.

As Classes de Coleção

Java fornece um conjunto de classes de coleção padrão que implementam interfaces de coleção. Algumas das classes fornecem implementações completas que podem ser usadas no estado em que se encontram e outras são classes abstratas, fornecendo implementações esqueléticas que são usadas como pontos de partida para a criação de coleções concretas.

As classes de coleção padrão são resumidas na tabela a seguir -

Sr. Não. Classe e descrição
1

AbstractCollection

Implementa a maior parte da interface da coleção.

2

AbstractList

Estende AbstractCollection e implementa a maior parte da interface List.

3

AbstractSequentialList

Estende AbstractList para uso por uma coleção que usa acesso sequencial em vez de aleatório de seus elementos.

4 LinkedList

Implementa uma lista vinculada estendendo AbstractSequentialList.

5 ArrayList

Implementa uma matriz dinâmica estendendo AbstractList.

6

AbstractSet

Estende AbstractCollection e implementa a maior parte da interface Set.

7 HashSet

Estende AbstractSet para uso com uma tabela hash.

8 LinkedHashSet

Estende HashSet para permitir iterações de pedido de inserção.

9 TreeSet

Implementa um conjunto armazenado em uma árvore. Estende AbstractSet.

10

AbstractMap

Implementa a maior parte da interface do Mapa.

11 HashMap

Estende AbstractMap para usar uma tabela de hash.

12 TreeMap

Estende AbstractMap para usar uma árvore.

13 WeakHashMap

Estende AbstractMap para usar uma tabela hash com chaves fracas.

14 LinkedHashMap

Estende o HashMap para permitir iterações de pedido de inserção.

15 IdentityHashMap

Estende AbstractMap e usa igualdade de referência ao comparar documentos.

As classes AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList e AbstractMap fornecem implementações esqueléticas das interfaces de coleção principais, para minimizar o esforço necessário para implementá-las.

As seguintes classes legadas definidas por java.util foram discutidas no capítulo anterior -

Sr. Não. Classe e descrição
1 Vetor

Isso implementa uma matriz dinâmica. É semelhante a ArrayList, mas com algumas diferenças.

2 Pilha

Stack é uma subclasse de Vector que implementa uma pilha padrão último a entrar, primeiro a sair.

3 Dicionário

Dicionário é uma classe abstrata que representa um repositório de armazenamento de chave / valor e opera de forma semelhante ao Map.

4 Hashtable

Hashtable fazia parte do java.util original e é uma implementação concreta de um Dicionário.

5 Propriedades

Propriedades é uma subclasse de Hashtable. É usado para manter listas de valores em que a chave é uma String e o valor também é uma String.

6 BitSet

Uma classe BitSet cria um tipo especial de array que contém valores de bits. Essa matriz pode aumentar de tamanho conforme necessário.

Os Algoritmos de Coleção

A estrutura de coleções define vários algoritmos que podem ser aplicados a coleções e mapas. Esses algoritmos são definidos como métodos estáticos dentro da classe Collections.

Vários dos métodos podem lançar um ClassCastException, que ocorre quando é feita uma tentativa de comparar tipos incompatíveis, ou um UnsupportedOperationException, que ocorre quando é feita uma tentativa de modificar uma coleção não modificável.

As coleções definem três variáveis ​​estáticas: EMPTY_SET, EMPTY_LIST e EMPTY_MAP. Todos são imutáveis.

Sr. Não. Algoritmo e descrição
1 Os Algoritmos de Coleção

Aqui está uma lista de toda a implementação do algoritmo.

Como usar um iterador?

Freqüentemente, você desejará percorrer os elementos de uma coleção. Por exemplo, você pode querer exibir cada elemento.

A maneira mais fácil de fazer isso é empregar um iterador, que é um objeto que implementa a interface Iterator ou ListIterator.

Iterator permite que você percorra uma coleção, obtendo ou removendo elementos. ListIterator estende Iterator para permitir a passagem bidirecional de uma lista e a modificação de elementos.

Sr. Não. Método e descrição do iterador
1 Usando Java Iterator

Aqui está uma lista de todos os métodos com exemplos fornecidos pelas interfaces Iterator e ListIterator.

Como usar um comparador?

Tanto TreeSet quanto TreeMap armazenam elementos em uma ordem de classificação. No entanto, é o comparador que define precisamente o que significa ordem de classificação .

Essa interface nos permite classificar uma determinada coleção de várias maneiras diferentes. Além disso, essa interface pode ser usada para classificar quaisquer instâncias de qualquer classe (mesmo classes que não podemos modificar).

Sr. Não. Método e descrição do iterador
1 Usando Java Comparator

Aqui está uma lista de todos os métodos com exemplos fornecidos pela Interface de comparação.

Resumo

A estrutura de coleções Java dá ao programador acesso a estruturas de dados predefinidas, bem como a algoritmos para manipulá-las.

Uma coleção é um objeto que pode conter referências a outros objetos. As interfaces de coleção declaram as operações que podem ser realizadas em cada tipo de coleção.

As classes e interfaces da estrutura de coleções estão no pacote java.util.