Como sabemos que HashSet é uma classe famosa em Java. HashSet é usado para armazenar os valores usando uma tabela hash. Neste tutorial, abordaremos HashSet em Python. Também aprenderemos como podemos projetar HashSet em Python.
Um HashSet é uma estrutura de dados fundamental em programação, comumente encontrada em linguagens como Java. Pertence ao Java Collections Framework e serve como uma implementação da interface definida. A característica distintiva de um HashSet é sua capacidade de armazenar elementos de uma forma que facilita a verificação eficiente da existência de elementos específicos e garante a exclusividade dentro do conjunto. Ao contrário de estruturas como listas, um HashSet não mantém nenhuma ordem específica entre seus elementos.
Uma característica chave de um HashSet é a sua garantia de exclusividade; não permite elementos duplicados. Operações como adicionar, remover e verificar a presença de elementos normalmente têm desempenho médio em tempo constante, tornando-se uma escolha eficiente para tais tarefas. Porém, é essencial observar que a ordem dos elementos em um HashSet não é garantida.
Caracteristicas principais:
Singularidade: Um HashSet não permite elementos duplicados. Ele usa o método equals() para verificar duplicatas, garantindo que cada elemento do conjunto seja único.
Nenhuma ordem: Os elementos em um HashSet não são armazenados em nenhuma ordem específica. Se precisar manter a ordem dos elementos, considere usar um LinkedHashSet, que mantém a ordem de inserção.
java público vs privado
Estrutura de dados subjacente: Internamente, um HashSet usa uma tabela hash para armazenar elementos. Isso permite complexidade média em tempo constante para operações básicas como adicionar, remover e conter.
Elementos Nulos: Um HashSet permite um elemento nulo. Se você tentar adicionar um elemento nulo duplicado, ele substituirá o existente.
Introdução
Podemos projetar HashSet sem usar nenhuma biblioteca de tabelas hash. Abaixo estão as várias funções diferentes -
adicionar (x) - O método add(x) é usado principalmente para inserir um valor x no HashSet.
contém (x) - O método contains(x) é usado principalmente para verificar se um valor x está presente no HashSet ou não.
remover (x) - O método remove(x) é usado principalmente para excluir x do HashSet. Se o HashSet não tiver nenhum valor, não fará nada.
Vamos entender esses métodos pelo exemplo abaixo.
Primeiro, inicialize o HashSet e chame a função add(1). Ele adicionará 1 ao conjunto de hash. Chame add(3), que adicionará 3, depois chame contains(1). Ele verificará se 1 está presente ou não no conjunto de hash. Agora chamamos contains(2), add(2), contains(2), remove(2), contains(2).
A saída será retornada como verdadeiro para 1 está presente, falso para 2 não está presente, verdadeiro para 2 está presente, falso para 2 não está presente, respectivamente.
Operações básicas de HashSet em Python
Podemos realizar algumas operações básicas no HashSet usando os seguintes métodos. Vamos entender esses métodos.
Adicionando novos valores no HashSet
No exemplo abaixo, adicionaremos o valor no conjunto hash usando a função add(). A função add() adiciona o valor um de cada vez. Vamos ver o código a seguir.
Exemplo -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6)
Saída:
Adding value: 2 Adding value: 7 Adding value: 6
Removendo valores em HashSet
Podemos remover o valor existente usando a função remove(). Vamos entender o código a seguir.
Exemplo -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.remove(7) obj.remove(6)
Saída:
Adding value: 2 Adding value: 7 Adding value: 6 Removed value: 7 Removed value: 6
Verificando se existem valores no HashSet
Neste exemplo, demonstraremos como podemos verificar se um determinado valor existe ou não utiliza o contém() função. Vamos entender o código a seguir.
Exemplo -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.contains(2)
Saída:
Adding value: 2 Adding value: 7 Adding value: 6 It contains: 2
Algoritmo para HashSet em Python
Na primeira etapa, definimos uma estrutura de dados chamada HashList. Então, inicializamos uma lista vazia como uma nova_lista . Em seguida, definimos uma função update() na qual found armazenará um valor booleano False. Agora, usamos o loop for para cada índice I e K. se a chave for igual a 'k', então nova_lista[i]=k e valor encontrado definido como True. O valor será inserido no final da lista se nenhum valor for encontrado.
O próximo passo é definir a função get(), que usaremos para o loop, e se o valor de k for igual à chave, a saída será True; caso contrário, Falso. Se a chave for igual a 'k', exclua o valor da lista nova lista. O mesmo processo será aplicado na função remove().
Agora, criaremos a classe principal HashSet. Esta classe irá declarar a função de inicialização onde o valor key_space = 2096. A hash_table terá uma lista de objetos do tipo new_list de tamanho espaço_chave . Em seguida, criaremos a função add(), na qual hash_key=chave%key_space e atualize a chave de hash_table[hash_key]. Depois disso, ligaremos para o remover função , em que hash_key = key % key_space e exclua a chave de hash_table[hash_key]. Depois disso, ligaremos para o contém função , no qual
hash_key = key% key_space e obtenha a chave de hash_table[hash_key].
Vamos ver o algoritmo de implementação passo a passo.
Algoritmo -
- Crie uma estrutura de dados chamada HashSet, inicialize-a como abaixo
- nova_lista = []
- Defina uma função update(). Isso levará a chave
- encontrado := Falso
- para cada índice i e chave k em new_list, faça
- se a chave for igual a k, então
- nova_lista[i]:= chave
- encontrado:= Verdadeiro
- sair do circuito
- se for considerado falso, então
- insira a chave no final de new_list
- Defina uma função get() . Isso levará a chave
- para cada k em new_list, faça
- se k é igual à chave, então
- retornar verdadeiro
- retorna falso
- Defina uma função remove(). Isso levará a chave
- para cada índice i e chave k em new_list, faça
- se a chave for igual a k, então
- excluir nova_lista[i]
- Agora crie um hashSet personalizado. Haverá alguns métodos como segue
- Inicialize isso da seguinte maneira -
- espaço_chave := 2096
- hash_table:= uma lista de objetos do tipo bucket de tamanho key_space
- Defina uma função add(). Isso levará a chave
- hash_key:= chave mod key_space
- chamar atualização (chave) de hash_table[hash_key]
- Defina uma função remove(). Isso levará a chave
- hash_key:= keymodkey_space
- excluir chave de hash_table[hash_key]
- Defina uma função contém(). Isso levará a chave
- hash_key:= keymodkey_space
- retornar get(chave) de hash_table[hash_key]
Implementação de HashSet em Python
Aqui implementaremos o algoritmo acima e criaremos um programa Python. Definiremos as duas classes: HashSet e CreateHashset. Vamos ver o código abaixo.
Código -
# Here, we are Designing the HashSet in python # Here, we are checking the values and will return the output class class verifyvalues: # Here, we are initialization function which has list new_list def __init__(self): self.new_list=[] # Here, we have the function to update values def update(self, key): found=False for i,k in enumerate(self.new_list): if key==k: self.new_list[i]=key found=True break if not found: self.new_list.append(key) # Here, we have function to get values def get(self, key): for k in self.new_list: if k==key: return True return False # Here, we have function to remove values def remove(self, key): for i,k in enumerate(self.new_list): if key==k: del self.new_list[i] # Here, we have defined a class as HashSet class HashSet: # Here, we have defined an Initialization function def __init__(self): self.key_space = 2096 self.hash_table=[verifyvalues() for i in range(self.key_space)] def hash_values(self, key): hash_key=key%self.key_space return hash_key # Here, we have also defined an add function def add(self, key): self.hash_table[self.hash_values(key)].update(key) # Here, we have also defined a remove function def remove(self, key): self.hash_table[self.hash_values(key)].remove(key) # Here, we have defined the contains function def contains(self, key): return self.hash_table[self.hash_values(key)].get(key) def display(self): ls=[] for i in self.hash_table: if len(i.new_list)!=0:ls.append(i.new_list[0]) print(ls) ob = HashSet() print(ob.hash_values(10)) print('Add 10') ob.add(10) print(ob.hash_values(6)) print('Add 6 ') ob.add(6) print(ob.hash_values(5)) print('Add 5 ') ob.add(5) print('Contains 10 : ',ob.contains(10)) print('Contains 3: ',ob.contains(3)) print('Contains 8 : ',ob.contains(9))
Saída:
10 Add 10 6 Add 6 5 Add 5 Contains 10 : True Contains 3: False Contains 8 : False 2 Add 2 3 Add 3 Contains 2 : True Remove 2 Contains 2 : False Contains 3 : True [3, 5, 6, 10]
Explicação: