AN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: Verdana; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
PAN>
ver a necessidade de escolha de um tipo de coleção para resolver um problema em particular.
Em que situação o tema é útil:
O uso correto de coleções pode contribuir para o bom desempenho da aplicação, além de ajudar em tarefas como ordenação de elementos, busca, filas de processamento, etc. Por isso, o conhecimento sobre os tipos de coleções torna-se imprescindível para o bom programador, que deve saber analisar cada situação e decidir por uma coleção da qual é possível obter mais benefícios. Neste sentido, o artigo agrega conhecimento sobre quais são e como são utilizadas as classes e interfaces de coleções introduzidas com as últimas versões do Java (Java SE 5 e Java SE 6).
Explorando novas coleções – Resumo DevMan:
Uma das vantagens das classes de coleções oferecidas pelo Java SE é a possibilidade de inserir, buscar, remover objetos por meio de métodos que estão prontos para uso. Porém, coleções oferecem mais do que isso: elas podem manter os objetos na ordem em que o programador definir, permitir a iteração de diferentes maneiras, aceitar ou não objetos duplicados, etc. Por isso é importante conhecer os diferentes tipos de coleções.
Este artigo foca na discussão sobre quais são as interfaces e classes de coleções que foram inseridas no Java SE 5 e no Java SE 6 para aumentar as possibilidades de escolha dos programadores. Basicamente, o artigo trata das coleções Queue, que implementam o conceito de filas, Deque, que são coleções Double Ended Queue, NavigableSet e NavigableMap que extendem as capacidades das coleções SortedSet e SortedMap com métodos para obter subconjuntos e buscar elementos com base em comparação, como maior que e menor que.
O Java Collections Framework já é conhecido por muitos programadores como um recurso importante no desenvolvimento de software Java. Apesar do número expressivo de classes de coleções existentes até o Java SE 1.4, as versões do Java SE 5 e 6 trouxeram melhorias importantes para essa API. Neste artigo, vamos explorar essas melhorias mostrando quais são e como podem ser utilizados os recursos de coleções introduzidos nessas duas últimas versões do Java.
Serão abordados aspectos sobre as novas interfaces e implementações (tais como Queue, NavigableSet, NavigableMap e Deque) e, também, sobre como deixar sua classe corretamente implementada para tirar o melhor proveito de todo o Java Collections Framework.
Java Collections Framework
Uma coleção representa um grupo de objetos com características em comum, ou associados segundo algum critério. Em Java, há diferentes maneiras de se representar coleções de objetos, incluindo a utilização de arrays. No entanto, o array não é a maneira mais prática de implementar coleções de objetos pois não podemos redimensioná-lo e operações como inserção, busca, ordenação, acesso concorrente, e muitas outras, são ausentes; embora sua implementação seja possível mas tipicamente trabalhosa e ineficiente. Por isso, a partir do Java SE 1.2, os criadores da linguagem definiram uma arquitetura unificada para representar e manipular coleções de objetos Java – o Java Collections Framework. Formado por interfaces, classes abstratas e implementações focadas em diferentes cenários de uso, o framework de coleções do Java traz muitas facilidades importantes para o programador e para o benefício das aplicações.
As coleções a partir do Java SE 1.2 podem ser facilmente implementadas por meio de classes que encapsulam toda a complexidade de manipulação dos objetos, incluindo métodos de inserção, remoção, ordenação e busca de objetos, que estão prontos para uso e possuem implementações eficientes e bem testadas.
As coleções do Java Collections Framework se diferenciam umas das outras em função da forma como se comportam. Coleções podem aceitar ou não objetos duplicados, manter ou não uma ordem ou classificação dos objetos, aceitar ou não nulos, serem ou não thread-safe, etc. Devido a esta variedade de comportamentos, para se obter maior benefício das coleções e, principalmente, para não ter problemas de inconsistência ao usar esse recurso de programação, é importante manter uma implementação correta dos métodos de comparação de objetos que serão colecionados. Isso pode ser feito:
· na classe do objeto por meio da sobrescrita correta dos métodos equals() e hashCode(), herdados da classe Object (detalhes no quadro “Métodos equals() e hashCode()”);
· na classe do objeto por meio da implementação da interface Comparable, que exige a implementação do método compareTo() (detalhes no quadro “Interface java.lang.Comparable”); e/ou,
· em uma outra classe, por meio da implementação da interface Comparator, que exige a implementação do método compare() (detalhes no quadro “Interface java.util.Comparator”).
Quando objetos são armazenados em coleções, são esses métodos que definem a ordem em que os objetos serão mantidos em coleções classificadas, se um determinado objeto é inserido ou deixado de fora da coleção e se o objeto está ou não presente na coleção (considerando uma chamada ao método contains(Object o) herdado da classe Collection, por exemplo). Se esses métodos não forem sobrescritos ou se a regra da sobrescrita não estiver correta, podemos obter resultados diferentes e inesperados dependendo do tipo de coleção utilizada.
Coleções que mantêm algum tipo de ordem nos objetos podem ser classificadas em ordered e sorted. Coleções ordered são aquelas cujos objetos são mantidos numa ordem estável, geralmente em função de índices ou ordem de inserção, e o resultado de várias iterações seguidas é sempre o mesmo. Coleções sorted são aquelas que mantêm classificação dos objetos, por exemplo, ordem alfabética ou numérica. Toda coleção ...