1. Contêineres e coleções

Containers ou coleções são classes que permitem armazenar e processar vários objetos de uma só vez. Você já conhece dois tipos de contêineres: arrays e listas.

Java tem várias dezenas de coleções, cada uma das quais armazena elementos de uma maneira específica. Aqui estão alguns deles:

Coleção Aula Descrição
List
ArrayList
Lista
LinkedList
lista encadeada
Vector
Vetor
Stack
Pilha
Set
HashSet
Definir
TreeSet
LinkedHashSet
Queue
PriorityQueue
Fila
ArrayQueue
Map
HashMap
Mapa/Dicionário
TreeMap
HashTable

Os nomes são um tanto ambíguos aqui. Na maioria das linguagens de programação, todas essas estruturas de dados são chamadas de coleções, mas não em Java. Em Java, algumas dessas classes implementam a Collectioninterface, enquanto outras não.

Assim, as coleções são divididas em coleções no sentido amplo e coleções no sentido restrito (somente aquelas que implementam a Collectioninterface).

Então, para evitar confusão, quando falamos de coleções queremos dizer no sentido estrito da palavra, ou seja, classes que implementam a Collectioninterface. Os tipos List, Sete Queuesão todos coleções. Coleções em sentido amplo são geralmente chamadas de contêineres . Isso inclui tipos como Mape arrays.


2. HashSetcoleção

A HashSetclasse é uma coleção de conjunto típica. De muitas maneiras, é semelhante à ArrayListclasse. De certa forma, é uma versão mais primitiva.

Você pode criar um HashSetobjeto usando uma instrução como:

HashSet<Type> name = new HashSet<Type>();

Onde Typeestá o tipo dos elementos que iremos armazenar na HashSetcoleção.

A HashSetclasse tem métodos como este:

Método Descrição
void add(Type value)
Adiciona o valueelemento à coleção
boolean remove(Type value)
Remove o valueelemento da coleção.
Retorna truese houver tal elemento
boolean contains(Type value)
Verifica se a coleção tem um valueelemento
void clear()
Limpa a coleção, removendo todos os elementos
int size()
Retorna o número de elementos na coleção

Aqui está um exemplo de uso de um conjunto.

Vamos escrever um programa que diga adeus ao usuário se ele disser olá. Para torná-lo mais interessante, daremos ao nosso programa a capacidade de entender "olá" em vários idiomas.

Código Observação
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
Crie um HashSetobjeto que armazene Stringelementos.


Adicionamos saudações em vários idiomas à setvariável.




Leia uma linha do console.


Se a string estiver em nosso conjunto de saudações, dizemos adeus.


3. Definir

A Setcoleção é projetada para conter um conjunto de elementos. É por isso que é chamado de Set(conjunto). Esta coleção tem três características.

Operações em um conjunto

Existem apenas três coisas que você pode fazer com um conjunto: adicionar elementos ao conjunto, remover elementos do conjunto e verificar se o conjunto contém um elemento específico. É isso.

Nenhuma ordem

Os elementos nesta coleção não têm índices. Você não pode obter um elemento por um índice ou gravar um valor em uma coleção em um índice específico. Um conjunto não tem métodos get()e set().

Elementos únicos

Todos os elementos de um conjunto são únicos. Ao contrário de uma lista, um conjunto pode conter apenas uma instância de um elemento. Um objeto está no conjunto ou não — não há uma terceira opção. Você não pode adicionar preto três vezes a um conjunto de cores. Ou está lá ou não está.

Encontrar elementos

Quando você adiciona um novo elemento, remove um elemento ou verifica se existe um elemento em um conjunto, uma pesquisa pelo elemento é realizada no método. O elemento passado é comparado com os elementos da coleção primeiro por hashCode(), e então se os valores retornados por hashCode()corresponderem, por equals().



4. Comparação de coleções: Listvs.Set

Vamos comparar dois tipos de cobranças: Liste Setveremos as principais diferenças, quando uma é mais vantajosa que a outra, e vice-versa.

Vamos tentar comparar List e Set usando brinquedos como exemplo.

A Listcoleção (lista) é como um conjunto de brinquedos dispostos ao longo da parede de uma brinquedoteca. Você pode adicionar um brinquedo ao final da lista. Se realmente precisar, também pode inseri-lo no meio (mas alguns dos brinquedos existentes terão que ser movidos).

Cada brinquedo tem um índice. Você pode se referir a um brinquedo por seu índice e também substituir o brinquedo número 7 pelo brinquedo número 13. Você pode remover o brinquedo número 4 da lista. Por fim, você pode aprender o índice de cada brinquedo da lista.

A Setcoleção (conjunto) é mais como uma pilha de brinquedos no meio do chão. Você pode adicionar um brinquedo à pilha e pode remover um brinquedo da pilha. Mas esses brinquedos não têm um índice fixo associado a eles.

Ou suponha que você esteja escolhendo um brinquedo para o aniversário de seu filho. Primeiro, você pensa se ele já tem o brinquedo. Todos os brinquedos que ele já possui formam um conjunto de brinquedos que você não escolherá comprar.

Deste ponto de vista, você pode ver que a ordem dos brinquedos em um conjunto de "brinquedos que já existem" não importa, nem importa se o aniversariante tem duas instâncias de um determinado brinquedo. Você não está interessado na ordem ou no número de cada brinquedo. O que importa é conhecer cada brinquedo único que existe no conjunto.

Para casos como este, você precisa da Setcoleção. Sua implementação mais popular é a HashSetclasse.