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 |
---|---|---|
|
|
Lista |
|
lista encadeada | |
|
Vetor | |
|
Pilha | |
|
|
Definir |
|
||
|
||
|
|
Fila |
|
||
|
|
Mapa/Dicionário |
|
||
|
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 Collection
interface, 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 Collection
interface).
Então, para evitar confusão, quando falamos de coleções queremos dizer no sentido estrito da palavra, ou seja, classes que implementam a Collection
interface. Os tipos List
, Set
e Queue
são todos coleções. Coleções em sentido amplo são geralmente chamadas de contêineres . Isso inclui tipos como Map
e arrays.
2. HashSet
coleção
A HashSet
classe é uma coleção de conjunto típica. De muitas maneiras, é semelhante à ArrayList
classe. De certa forma, é uma versão mais primitiva.
Você pode criar um HashSet
objeto usando uma instrução como:
HashSet<Type> name = new HashSet<Type>();
Onde Type
está o tipo dos elementos que iremos armazenar na HashSet
coleção.
A HashSet
classe tem métodos como este:
Método | Descrição |
---|---|
|
Adiciona o value elemento à coleção |
|
Remove o value elemento da coleção. Retorna true se houver tal elemento |
|
Verifica se a coleção tem um value elemento |
|
Limpa a coleção, removendo todos os elementos |
|
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 |
---|---|
|
Crie um HashSet objeto que armazene String elementos. Adicionamos saudações em vários idiomas à set variável. Leia uma linha do console. Se a string estiver em nosso conjunto de saudações, dizemos adeus. |
3. Definir
A Set
coleçã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: List
vs.Set
Vamos comparar dois tipos de cobranças: List
e Set
veremos 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 List
coleçã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 Set
coleçã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 Set
coleção. Sua implementação mais popular é a HashSet
classe.
GO TO FULL VERSION