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 }