diff --git a/datastructure/hashmap/hashmap.go b/datastructure/hashmap/hashmap.go index 53d2c90..95235c0 100644 --- a/datastructure/hashmap/hashmap.go +++ b/datastructure/hashmap/hashmap.go @@ -78,6 +78,28 @@ func (hm *HashMap) putValue(hash uint64, key, value any) any { return value } +// Delete key value in hashmap +// func (hm *HashMap) Delete(key any) { +// hm.deleteValue(hm.hash(key)) +// } + +func (hm *HashMap) Delete(key any) { + hash := hm.hash(key) + node := hm.table[hash] + if node == nil { + return + } + + hm.table = append(hm.table[:hash], hm.table[hash+1:]...) + hm.size-- +} + +// Contains checks if given key is in hashmap or not +func (hm *HashMap) Contains(key any) bool { + node := hm.table[hm.hash(key)] + return node != nil +} + func (hm *HashMap) resize() { hm.capacity <<= 1 diff --git a/datastructure/hashmap/hashmap_test.go b/datastructure/hashmap/hashmap_test.go index 56642f8..e057faf 100644 --- a/datastructure/hashmap/hashmap_test.go +++ b/datastructure/hashmap/hashmap_test.go @@ -7,7 +7,7 @@ import ( ) func TestHashMap_PutAndGet(t *testing.T) { - assert := internal.NewAssert(t, "TestHashMap_Get") + assert := internal.NewAssert(t, "TestHashMap_PutAndGet") hm := NewHashMap() @@ -18,3 +18,25 @@ func TestHashMap_PutAndGet(t *testing.T) { hm.Put("abc", 4) assert.Equal(4, hm.Get("abc")) } + +func TestHashMap_Delete(t *testing.T) { + assert := internal.NewAssert(t, "TestHashMap_Delete") + + hm := NewHashMap() + + hm.Put("abc", 3) + assert.Equal(3, hm.Get("abc")) + + hm.Delete("abc") + assert.IsNil(hm.Get("abc")) +} + +func TestHashMap_Contains(t *testing.T) { + assert := internal.NewAssert(t, "TestHashMap_Contains") + + hm := NewHashMap() + assert.Equal(false, hm.Contains("abc")) + + hm.Put("abc", 3) + assert.Equal(true, hm.Contains("abc")) +}