Este é um post disponível para assinantes MVPArtigo Java Magazine 18 - Coleções de ponta a ponta
Artigo publicado na Java Magazine Edição 18.

Coleções de ponta a ponta
As APIs Java para Estruturas de Dados
Conheça a fundo as Collections do Java 2 e Tiger, o Commons Collections e outras APIs
A
ciência da computação é um edifício suportado por dois alicerces:
algoritmos e estruturas de dados. Mas enquanto o desenvolvimento de
novos algoritmos é uma tarefa recorrente em qualquer projeto com o
mínimo de complexidade, as estruturas de dados se prestam melhor à
padronização e ao reuso, tendo sido identificado um número
relativamente pequeno de estruturas que satisfazem às necessidades da
grande maioria das aplicações.
Num
sentido mais amplo, qualquer entidade que contém dados é uma “estrutura
de dados”, e isso inclui qualquer objeto que possua pelo menos um
atributo, bem como grupos mais complexos de vários objetos, como um
objeto Retangulo contendo dois objetos Ponto. Mas vamos usar aqui a
definição mais estrita, onde “estrutura de dados” é uma entidade cuja
funcionalidade essencial (semântica) consiste na sua forma de organizar
os dados, e não nos dados propriamente ditos. Por exemplo, um Array é
uma estrutura que organiza dados de forma a permitir acesso aleatório
para leitura e escrita. O que existe em cada posição do array é menos
importante.
Por
essa definição, os termos “estrutura de dados” e “coleção” tornam-se
sinônimos, pois coleções são precisamente aquelas entidades dedicadas a
armazenar e organizar dados de alguma forma. Os livros-texto de
computação dedicados ao assunto costumam usar a expressão “Estruturas
de Dados”, mais tradicional. O termo “coleção” é mais recente, e parece
ter se originado da linguagem Smalltalk, a primeira a instituir uma
biblioteca ampla e bem organizada de tais objetos como parte essencial
do seu ambiente de programação.
Muitos
programadores que se habituaram a trabalhar com bibliotecas
padronizadas de coleções tendem a classificar a disciplina de
estruturas de dados como uma daquelas matérias espinhosas que se tornam
inúteis após a formatura. Afinal, quem precisa saber implementar uma
hashtable hoje em dia? Está tudo pronto, pelo menos em qualquer
ambiente de programação mais ou menos respeitável (até no C++, que hoje
tem a STL, standard template library). Por outro lado, o fato de termos
APIs prontas não elimina a utilidade de conhecer o assunto de forma
mais profunda. As coleções continuam sendo entidades complexas, e às
vezes não é óbvia a melhor maneira de utilizá-las, especialmente quando
há demandas de alto desempenho.
Nota:
Devido ao grande número de classes e interfaces mencionadas, para
facilitar a leitura identificaremos as interfaces usando o estilo
Interface e as classes com Classe. Por exemplo: List, ArrayList.
Coleções primitivas
Como
programador de C++ numa vida anterior, lembro-me bem da declaração de
Bjarne Stroustrup, que seu maior erro foi não ter incluído uma boa
biblioteca de coleções na primeira versão daquela linguagem. James
Gosling e equipe começaram melhor, mas não muito. A versão 1.0 do Java
já tinha um suporte elementar a coleções (Vector, Stack, Hashtable,
Properties, BitSet, Enumeration, e os arrays nativos – tipo[]). O
tamanho reduzido da API se justificaria considerando o tamanho total do
Java 1.0, mas pior era o design da API, pouco extensível. Essa
deficiência logo deu espaço para bibliotecas de terceiros oferecendo
coleções mais ricas e bem elaboradas, como a JGL (inspirada na STL do
C++).
Coleções
são tão essenciais para qualquer linguagem decente quanto strings ou o
loop for. Felizmente, o problema foi logo reparado com a biblioteca de
collections, introduzida no Java 2 (e também disponível numa versão
para JDK 1.1.x, mas esta versão não é mais atualizada desde o
lançamento do J2SE 1.2).
Coleções do Java 2
A
API original de collections é um dos pontos fortes do Java: em minha
opinião, uma das APIs mais bem projetadas da plataforma J2SE,
especialmente na sua estruturação em três camadas: interfaces (ex.:
List), classes abstratas (AbstractList) e classes de implementação
(ArrayList).
ATENÇÃO! A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVP
Space do autor


0
0
