Programando com o Java Collections Framework

Conheça e adote os vários tipos de coleções Java em seus sistemas.

Fique por dentro
Este artigo apresenta os principais tipos de coleções disponíveis no framework de coleções da linguagem Java, que inclui listas, vetores, mapas, pilhas, conjuntos, entre outros.

Através de uma hierarquia de interfaces, a linguagem Java implementa e disponibiliza classes que definem os mais variados tipos de coleções a fim auxiliar no desenvolvimento de aplicações.

As classes do framework de coleções do Java livram o programador da necessidade de implementar complicadas estruturas de dados para gerenciar coleções de objetos facilitando, portanto, o desenvolvimento de aplicações, acelerando o desenvolvimento e simplificando o intercâmbio de dados ao viabilizar uma implementação mais rápida, eficiente e padronizada com o reuso de coleções que são amplamente adotadas no mundo Java.

A implementação de coleções na linguagem Java, antes do Java 2 (JDK 1.2), incluía poucas classes, como Vector e HashTable, e não tinha a forma e organização de um framework.

o lançamento do Java 2, no entanto, foram criadas novas classes e interfaces para organizar os mais diversos tipos de coleções agora existentes, originando assim o Java Collections Framework.

Com este framework, o Java ganhou componentes comuns – reutilizáveis para diversas aplicações – que usam coleções de dados para atender as mais variadas finalidades de coleções, como listas, conjuntos, pilhas, vetores, entre outros.

Algum tempo depois, já no Java 5, foram adicionados diversos recursos ao framework de coleções devido à criação de Generics, o que permitiu criar coleções “tipadas”, isto é, coleções cujos elementos são restritos a um determinado tipo em vez de Object.

Além disso, com o Java 5, foi criado também o laço "for melhorado" (enhanced for), possibilitando percorrer qualquer coleção facilmente.

Passados alguns anos, com o lançamento do Java 7, mais melhorias foram realizadas no framework de coleções e foi criado o operador diamante, que simplifica a instanciação de objetos (coleções) usando Generics.

No Java Collections Framework, através de interfaces, são definidos e organizados os mais diversos tipos de coleções, de forma que são oferecidas classes que implementam os mais variados padrões de coleções, como mostra na Figura 1.

Figura 1. Estrutura das principais interfaces e classes do framework de coleções.

A interface java.util.Iterable está no topo da hierarquia de interfaces do framework e sua principal função é definir que qualquer coleção filha seja iterável pelo laço de repetição “for melhorado”. Para isso, ela disponibiliza alguns métodos, sendo iterator() o método principal, que retorna um objeto que implementa a interface Iterator.

Através da interface java.util.Iterator pode-se percorrer qualquer coleção facilmente, pois além da vantagem de se usar o “for melhorado”, é uma interface que define alguns métodos que permitem percorrer qualquer tipo de coleção. Os principais métodos são:

Observe que tanto Iterable como Iterator fazem uso de Generics. Sendo assim, em vez de apenas criar coleções para armazenar objetos do tipo Object, é possível que sejam criadas coleções “tipadas”, restringindo o tipo de objeto que a coleção pode armazenar (este recurso é denotado pelo <E> na Figura 1), aumentando assim o controle da coleção pelo programador, uma vez que esse recurso permite descobrir erros de programação em tempo de compilação.

Como resultado do uso de Generics na interface Iterable, a sua interface filha java.util.Collection também pode ser parametrizada com um tipo usando Generics.

Como Collection é a interface mãe de quase todos os tipos de coleções, as funcionalidades conferidas a ela através de Generics são automaticamente herdadas por todas as coleções filhas.

A interface Collection tem a função de definir muitas das funcionalidades comuns a quase todas as coleções e será por ela que iniciaremos esse artigo.

A interface Collection

A maioria das coleções em Java derivam da interface java.util.Collection, que define métodos comuns entre todas elas com o objetivo de padronizar muitas das operações básicas suportadas em cada tipo de coleção, a saber:

Como a interface Collection define o tipo mais alto na hierarquia de coleções, as suas interfaces filhas definem tipos mais especializados, como as interfaces List, Set, SortedSet, Queue, Deque, entre outras, que automaticamente herdam todos os seus métodos. As principais interfaces filhas de Collection serão apresentadas a seguir.

A interface List

A interface java.util.List tem o objetivo de definir coleções que têm a função de servirem como arrays de tamanho dinâmico, de forma que cada elemento seja acessível por um índice, que é a posição do elemento no array. Além disso, novos elementos podem ser criados ou removidos em qualquer posição e pode haver elementos duplicados.

As principais classes que descendem da interface List são " [...] continue lendo...

Artigos relacionados