parent
d29998a797
commit
430536da5a
@ -0,0 +1,52 @@ |
|||||||
|
package hashmap |
||||||
|
|
||||||
|
|
||||||
|
import ( |
||||||
|
"hash/crc32" |
||||||
|
) |
||||||
|
|
||||||
|
const ( |
||||||
|
BucketCount = 256 |
||||||
|
) |
||||||
|
|
||||||
|
type HashNode struct { |
||||||
|
key string |
||||||
|
val any |
||||||
|
} |
||||||
|
|
||||||
|
type HashBucket struct { |
||||||
|
contents []HashNode |
||||||
|
} |
||||||
|
|
||||||
|
type Hashmap struct { |
||||||
|
buckets [BucketCount]HashBucket |
||||||
|
} |
||||||
|
|
||||||
|
func New() *Hashmap { |
||||||
|
hmap := new(Hashmap) |
||||||
|
return hmap |
||||||
|
} |
||||||
|
|
||||||
|
func (hmap *Hashmap) Hash(key string) uint32 { |
||||||
|
return crc32.ChecksumIEEE([]byte(key)) % BucketCount |
||||||
|
} |
||||||
|
|
||||||
|
func (hmap *Hashmap) Add(key string, val any) { |
||||||
|
id := hmap.Hash(key) |
||||||
|
the_bucket := &hmap.buckets[id] |
||||||
|
node := HashNode{key, val} |
||||||
|
the_bucket.contents = append(the_bucket.contents, node) |
||||||
|
} |
||||||
|
|
||||||
|
func (hmap *Hashmap) Get(key string) any { |
||||||
|
id := hmap.Hash(key) |
||||||
|
the_bucket := &hmap.buckets[id] |
||||||
|
|
||||||
|
for _, node := range the_bucket.contents { |
||||||
|
if node.key == key { |
||||||
|
return node.val |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return nil |
||||||
|
} |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
package tests |
||||||
|
|
||||||
|
import ( |
||||||
|
"testing" |
||||||
|
"github.com/stretchr/testify/assert" |
||||||
|
"MY/dsa/hashmap" |
||||||
|
) |
||||||
|
|
||||||
|
func TestHashmap(t *testing.T) { |
||||||
|
hmap := hashmap.New() |
||||||
|
|
||||||
|
hmap.Add("zed", 100) |
||||||
|
hmap.Add("joe", "That Thing") |
||||||
|
hmap.Add("mary", 300.10) |
||||||
|
|
||||||
|
val := hmap.Get("zed") |
||||||
|
assert.Equal(t, val, 100, "bad zed") |
||||||
|
|
||||||
|
val2 := hmap.Get("joe") |
||||||
|
assert.Equal(t, val2, "That Thing", "bad joe") |
||||||
|
|
||||||
|
val3 := hmap.Get("mary") |
||||||
|
assert.Equal(t, val3, 300.10, "bad mary") |
||||||
|
|
||||||
|
val4 := hmap.Get("nothere") |
||||||
|
assert.Equal(t, val4, nil, "bad missing") |
||||||
|
} |
||||||
Loading…
Reference in new issue