Skip to content

Commit 04691ee

Browse files
authored
Create HashMap.py
Hash map creation
1 parent 90ddcf6 commit 04691ee

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

HashMap.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
class HashMap:
2+
def __init__(self, array_size):
3+
self.array_size = array_size
4+
self.array = [None for item in range(array_size)]
5+
6+
def hash(self, key, count_collisions=0):
7+
key_bytes = key.encode()
8+
hash_code = sum(key_bytes)
9+
return hash_code + count_collisions
10+
11+
def compressor(self, hash_code):
12+
return hash_code % self.array_size
13+
14+
def assign(self, key, value):
15+
array_index = self.compressor(self.hash(key))
16+
current_array_value = self.array[array_index]
17+
18+
if current_array_value is None:
19+
self.array[array_index] = [key, value]
20+
return
21+
22+
if current_array_value[0] == key:
23+
self.array[array_index] = [key, value]
24+
return
25+
26+
# Collision!
27+
28+
number_collisions = 1
29+
30+
while(current_array_value[0] != key):
31+
new_hash_code = self.hash(key, number_collisions)
32+
new_array_index = self.compressor(new_hash_code)
33+
current_array_value = self.array[new_array_index]
34+
35+
if current_array_value is None:
36+
self.array[new_array_index] = [key, value]
37+
return
38+
39+
if current_array_value[0] == key:
40+
self.array[new_array_index] = [key, value]
41+
return
42+
43+
number_collisions += 1
44+
45+
return
46+
47+
def retrieve(self, key):
48+
array_index = self.compressor(self.hash(key))
49+
possible_return_value = self.array[array_index]
50+
51+
if possible_return_value is None:
52+
return None
53+
54+
if possible_return_value[0] == key:
55+
return possible_return_value[1]
56+
57+
retrieval_collisions = 1
58+
59+
while (possible_return_value != key):
60+
new_hash_code = self.hash(key, retrieval_collisions)
61+
retrieving_array_index = self.compressor(new_hash_code)
62+
possible_return_value = self.array[retrieving_array_index]
63+
64+
if possible_return_value is None:
65+
return None
66+
67+
if possible_return_value[0] == key:
68+
return possible_return_value[1]
69+
70+
retrieval_collisions += 1
71+
72+
return

0 commit comments

Comments
 (0)