Closed JayCesar closed 1 year ago
A interface Set é uma extensão (herança) da Interface Collection. O Conjunto é uma estrutura que modela a definição matemática de um conjunto de dados. É uma coleção de objetos, que não permite objetos duplicados. O conjunto permite no máximo um elemento nulo.
Fazendo uma analogia com Blocos de montar, um Set seria como uma coleção de blocos, ou seja, um conjunto, sem elementos repetidos, não ordenados, como mostra a imagem abaixo:
A implementação HashSet é a mais rápida de todas, porque ela utiliza internamente uma HashTable e seus elementos não são ordenados. Essa implementação é indicada se você precisa apenas garantir a alta performance sem se importar com a ordem com que os elementos estão ordenados
A interface Iterable é a raiz de toda a hierarquia - a clase 'mãe' de toda a hierarquia de coleção. Isso significa que cada classe e interface a implementa. A função principal do iterator é permitir que o usuário percorra todos os objetos de qualquer uma das Collections, presentes no Pacote Collections, como se fossem sequências simples de itens de dados.
Sintaxe:
Iterator<T> nomeDoIterator = nomeDaCollection.iterator();
O item
Método | Descrição |
---|---|
hasNext() | Retorna verdadeiro se a iteração tiver mais elementos. |
next() | Retorna o próximo elemento na iteração. Ele lança a Exceção NoSuchElementException se nenhum outro elemento estiver presente. |
As principais vantagens da Interface Iterator são:
Podemos utilizar esta Interface com qualquer Collection;
É um Iterador (cursor) universal para Collections.
Os nomes dos métodos são simples e fáceis de usar.
As principais limitações da Interface Iterator são:
DICA: Para efetuar iteração paralela, utilizamos outra Interface, chamada de SplitIterator, que divide a Collection em partes menores e percorre estas partes simultaneamente.
A Collection ArrayList é a escolha natural quando for necessário usar um vetor redimensionável, que é muito mais eficiente para leitura, por ser implementado internamente com vetores, o que a torna ideal para o acesso aleatório aos dados armazenados.
Principais Métodos da Interface List
Método | Descrição |
---|---|
add(Objeto) | Adiciona um objeto no final da lista. |
add(Indice,Objeto) | Adiciona um objeto na posição indicada (empurra elementos existentes para a frente) |
get(Indice) | Recupera um objeto pelo índice. |
indexOf(Objeto) | Procura um objeto e retorna índice da primeira ocorrência do objeto. |
set(Indice,Objeto) | Grava um objeto na posição indicada (apaga qualquer outro que ocupava a posição). |
remove(Indice) | Apaga o objeto armazenado na posição indicada pelo índice. |
clear() | Limpa a lista |
size() | Retorna o tamanho da lista (numero de elementos armazenados). |
isEmpty() | Retorna true se a lista está vazia. |
contains(Objeto) | Retorna true se existe uma ocorrência do elemento na lista. |
sort(null) | Ordena os elementos da lista em ordem crescente. |
sort(Comparator.reverseOrder()) | Ordena os elementos da lista em ordem decrescente. |
Set é uma coleção não ordenada de objetos, que não permite o armazenamento de valores duplicados, ou seja, ela permite apenas valores únicos. Essa interface contém os métodos herdados da Interface Collection e adiciona um recurso que restringe a inserção dos elementos duplicados. Esta classe também permite a inserção de um único elemento nulo (NULL), embora não seja recomendado.
Os objetos que inserimos na Collection Set não serão necessariamente inseridos na mesma ordem e inclusive esta ordem não é constante ao longo do tempo. A Collection Set não possui um Método para obter um Objeto a partir do seu índice, como vimos na Collection List.
Os objetos são inseridos na Collection Set com base em seu Hashcode. O Hashcode é um número inteiro com 7 dígitos, calculado a partir do Método Hashcode(). A partir do Hashcode do Objeto, obtido pelo Método hashcode(), a Collection Set determina a posição onde o Objeto será armazenado no Hashmap. Por se tratar de um número calculado, a posição do elemento será aleatória.
O HashSet usa internamente o HashMap para armazenar seus elementos. Sempre que você cria um objeto HashSet, um objeto HashMap associado a ele também é criado. Este objeto HashMap é usado para armazenar os elementos inseridos no HashSet. Os elementos adicionados ao HashSet são armazenados como chaves desse objeto HashMap. O valor associado a essas chaves será uma constante (PRESENT).
Sintaxe:
Set<T> setNumeros = new HashSet<T>();
Método | Descrição |
---|---|
add(Objeto) | Adiciona um Objeto na Collection Set. |
remove(Objeto) | Apaga o Objeto armazenado na Collection Set. |
clear() | Limpa a Collection Set |
size() | Retorna o tamanho da Collection Set (numero de elementos armazenados). |
isEmpty() | Retorna true se a Collection Set está vazia. |
contains(Objeto) | Retorna true se o Objeto existe na Collection Set. |
hashcode() | Retorna o Hashcode do elemento. |
Collections (coleções) em Java são tipos especiais de classes utilizadas para manipular grupos de dados do mesmo tipo (por exemplo, coleção de strings), com tamanho flexível.
📌 Collections (My Summary)
Quando a gente utiliza o array precisamos definir um tamanho para ele na instanciação. Isso é uma limitação que pode causar alguns problemas para desenvolvedores, pois quando há a necessidade de trabalhar com grandes volumes de dados, torna-se muito difícil mensurar o número de objetos que iremos armazenar. Para suportar estruturas de dados mais fexíveis - sem tamanho pré-definido - o Java fornece a Classe Coleection (coleção);
Uma coleção é uma Estrutura de Dados que contém e processa um conjunto de dados. Para eu conseguir acessar essas dados amazenados e encapsulados eu preciso utilizar métodos pré-definidos.
⚠️ As coleções utilizam matrizes para o armazenamento, mas elas ocultam da pessoa desenvolvedora a complexidade de gerenciar o tamanho da Matriz de forma dinâmica.
As Coleções oferecem diversas formas de armazenar os dados com base em fatores como:
📌 Collections
Collections é uma biblioteca de classes e interfaces 'um combo) dentro do pacote **java.util.*. Essa blitioteca Collection implementa as PRINCIPAIS ESTRUTURAS DE DADOS** de forma reutilizável (usando apenas duas inferfaces comuns).
Ela oferece também implementações de cursor para iteração (iterator), para extrair os dados de qualquer estrutura usando uma única interface e implementações de métodos estáticos utilitários para manipulação de coleções e vetores.
CONTÚDO, as Collections não suportam dados primitivos (int, float, double, enttre outros); somente se forem encapsulados dentro de Objetos ou se forem utilizadas as Classes Wrappers para converter os primitivos em Objetos:
Classes Wrappers
Nos Organogramas abaixo, temos uma visão geral das Classes e Interfaces, que compõem o Pacote Collections:
Interface é uma estrutura que representa uma Clase abstrata "pura" em java, que não possui aributos de dados, não possui um método construtor, todos os seus Métodos são abstratos e não é declarada como Classe e sim como interface. É como se fosse um 'contrato a ser assinado'.
Uma List seria como uma sequência de blocos numerados (índices), fazendo um analogia com Blocos de montar:
A implementação ArryList é bem masi eficiente do que a implementação Vector (Embora sejam semelhantes).
A Implementação LinkedList ou Lista Vinculada é uma estrutura de dados linear, na qual os elementos não são armazenados em locais de memória contíguos (sequenciais). Os elementos em uma lista vinculada são vinculados usando ponteiros internamente, que "apontam" para o endereço de Memória do próximo item (SimpleLinkedList - Lista Vinculada simples) ou para o endereço de Memória do próximo item e do item anterior (DoubleLinkedList - Lista Duplamente Vinculada).
Fazendo uma analogia com Blocos de montar, uma LinkedList seria como uma sequência de blocos que possuem conexões (links) com o próximo bloco (encadeada) e com o bloco anterior (duplamente encadeada), como mostra a imagem abaixo:
A Implementação Stack, implementa a estrutura de dados chamada Pilha. Uma Pilha é uma estrutura de dados do tipo LIFO: "O último elemento inserido na pilha é o primeiro elemento que será retirado da pilha." (Last In - First Out).
Fazendo uma analogia com Blocos de montar, uma Stack seria como uma pilha de blocos, um em cima do outro, como mostra a imagem abaixo:
A interface Queue (Fila) é uma extensão (herança) da Interface Collection. Queue é a implementação da Estrutura de Dados conhecida como fila, onde "O primeiro elemento adicionado, será primeiro elemento a ser retirado da fila" (FIFO - First in, First out).
Fazendo uma analogia com Blocos de montar, uma Fila seria como uma sequência de blocos, como mostra a imagem abaixo:
Tip: A Estrutura de dados fila pode ser representada no mundo real como uma fila de pessoas em um balcão, onde a pessoa que entra primeiro será atendida primeiro e log sai da fila primeiro.