Article image
Priscila Campos
Priscila Campos30/08/2023 09:12
Compartilhe

Java Collections Framword: Um resumo sobre as principais Interfaces

    Uma coleção, em Java, é um recurso capaz de armazenar e tratar um conjunto de elementos de mesmo tipo, como se fosse uma única variável.

    O mecanismo mais simples para utilização desse recurso é o Array. Um Array precisa ter o seu tamanho pré-definido, não podendo ser alterado após sua inicialização. Para declarar um Array, define-se o tipo dos elementos que o comporão, seguido de um par de chaves:

     String[] arrayDeStrings;
    

    No entando, o Array é um recurso limitado, e que não atende a todas as necessidades de gerenciamento e manipulação de coleções. Para lidarmos melhor com conjuntos de elementos, temos no Java a Collections Framework, uma arquitetura unificada que facilita e amplia as opcões de gerenciamento de coleções de objetos.

    A Collection Framework é composta por dois grupos. O primeiro é derivado da interface java.util.Collection, e o segundo origina-se na interface java.util.Map.

    image

    Estrutura da Java Collections Framework (http://www.mauda.com.br/?p=2300)

    1- java.util.Collection

    Interface Iterable

    Sendo a interface “mãe” da Collection, a interface java.util.Iterable tem como função principal permitir que qualquer coleção derivada seja iterável pelo laço forEach (ou for melhorado). Além disso, são definidos outros métodos que permitem percorrer com facilidade qualquer tipo de coleção.

    Outra característica dessa interface é a possibilidade de tipagem, uma restrição do tipo de objeto que a coleção pode armazenar. Isto é feito com o uso de Generics e garante um melhor controle da coleção, pois permite que sejam notados erros de programação ainda em tempo de compilação.

    Iterable: Métodos

    image

    Interface Collection

    A java.util.Collection deriva da java.util.Iterable, e está na raiz das interfaces do primeiro grupo da Collections Framework.

    Neste ponto, diferentemente dos Arrays, os elementos de uma coleção devem ser sempre objetos, então, para trabalhar com tipos primitivos é necessário utilizar as classes Wrapper. Existem variações de comportamento entre as coleções daqui derivadas, algumas permitem elementos duplicados e outras não; algumas armazenam os elementos de forma ordenada, e outras de forma aleatória.

    A interface Collection define os métodos comuns entre as suas subinterfaces, padronizando as operações básicas disponíveis para essas coleções.

    Collection: Métodos

    image

    O grupo de subinterfaces conhecidas da Collection é composto por: 

    - java.util.Set

    - java.util.SortedSet

    - java.util.NavigableSet

    - java.util.Queue

    - java.util.concurrent.BlockingQueue

    - java.util.concurrent.TransferQueue

    - java.util.Deque

    - java.util.concurrent.BlockingDeque

    Interface List

    A interface List consiste em uma coleção sequencial, onde os elementos são armazenados na ordem em que são inseridos. É indicada para os casos em que ter o controle sobre a posição dos elementos é importante, já que permite o acesso a cada um deles através do seu índice (o número inteiro que indica a sua posição na lista). Para isso, a interface List fornece algumas novas operações, além das herdadas da Collection.

    Em uma List não há restrição quanto a repetições, logo, pode haver mais de um elemento com a mesma informação. Tabém é aceita a inserção de um ou mais elementos nulos (null).

    Existem ainda algumas implementações adicionais para restringir os elementos que podem ser adicionados. Podem ser proíbidos elementos nulos ou restringido o tipo dos elementos, por exemplo.

    Há duas implementações de uso geral da List na plataforma Java: ArrayList e LinkedList. Além delas, temos também, as classes Stack e Vector.

    List: Métodos

    image

    Interface Set

    Com a interface Set, as coleções não podem ter elementos duplicados, consequentemente, também aceitam apenas um único elemento nulo (null). Diferentemente da List, aSet não é sequencial, ou seja, não há garantia de que os elementos se localizarão na coleção na mesma ordem em que foram inseridos. Um ponto de atenção, é que, ao tentar inserir um elemento que já existe numa coleção Set, a operação será ignorada, sendo preservado o elemento já existente.

    Basicamente, a interface Set é uma abstração de um Conjunto Matemático. Ela contém apenas os métodos herdados da interface Collection, adicionando a eles a restrição quanto à repetição de elementos.

    Há três implementações de uso geral da Set na plataforma Java: HashSet, TreeSet, e LinkedHashSet.

    Set: Métodos

    image

    Queue

    A Queue é uma coleção que obedece a estrutura de uma fila, promovendo uma organização lógica de saída dos seus elementos. Normalmente, seus elementos são organizados de maneira FIFO - First In First Out -, “Primeiro a Entrar, Primeiro a Sair”, o que significa que a ordem de inserção dos objetos na coleção será necessariamente a ordem de saída desta.

    A organização FIFO não é obrigatória, podendo ser definida uma ordenação alternativa dos elementos, que pode ser por uma regra pré-estabelecida de prioridade, ordem natural, ou ainda de maneira LIFO - Last In First Out -, “Ultimo a Entrar, Primeiro a Sair”, em que o ultimo elemento a ser inserido, será obrigatoriamente o primeiro a sair.

    O início da fila é entendido como o elemento que seré removido numa próxima chamada (remove() ou poll()), e cada instância de uma Queue deve especificar os critérios de ordenação.

    Implementações da Queue, em geral, não aceitam elementos nulos (null); e mesmo quando essa inserção é possível, ela não é recomendada, pois null é o valor retornado pelo método poll() -usado para remover um elemento da fila - para indicar que a fila está vazia.

    Queue: Métodos

    image

    2 - java.util.Map

    Map

    Enquanto os objetos originados da Collection armazenam um conjunto de valores de um único tipo, no java.util.Map, cada elemento armazenado correspondem a um par de informações. Esses pares são composto pela combinação de uma chave (key) e de um valor (value).

    A Oracle descreve um Map como “Um objeto que mapeia chaves para valores. Um mapa não pode conter chaves duplicadas; cada chave pode mapear para no máximo um valor.”

    Aqui temos um ponto de atenção:

    Vimos que num objeto da interface Set, onde não são permitidos valores duplicados, ao tentar adicionar um elemento de mesmo valor, essa operação será ignorada, mantendo-se o elemento já existente. Já nos objetos Map, ao adicionar uma chave igual à outra pré-existente no conjunto, o valor correspondente será substituído pelo novo.

    A implementação de um Map pode ou não garantir uma ordenação específica, dependendo da classe utilizada. Da mesma forma, podem ser definidas restrições para as chaves e valores, por exemplo, podem ser proibidos chaves e valores nulos, ou restringidos os tipos de chave aceitos.

    Assim como na Collection, o Map também aceita o uso de Generics, aumentando a segurança no desenvolvimento.

    Um exemplo de uso de Map poderia ser um objeto para guardar as informações de uma agenda telefônica. Para cada nome (key) de contato, haveria um numero de telefone (value) correspondente.

    Map: Métodos

    image

    Referências

    https://docs.oracle.com/javase/8/docs/technotes/guides/collections/overview.html

    https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html

    https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html

    https://docs.oracle.com/javase/8/docs/api/java/util/List.html

    https://docs.oracle.com/javase/tutorial/collections/interfaces/list.html

    https://docs.oracle.com/javase/tutorial/collections/interfaces/set.html

    https://docs.oracle.com/javase/8/docs/api/java/util/Set.html

    https://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html

    https://docs.oracle.com/javase/8/docs/api/java/util/Queue.html

    https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

    https://docs.oracle.com/javase/6/docs/api/java/util/Map.html

    https://www.devmedia.com.br/programando-com-o-java-collections-framework/32482

    Compartilhe
    Comentários (0)