structure/hashmap/hashmap.go

43 lines
809 B
Go
Raw Normal View History

2019-04-16 19:22:07 +00:00
package hashmap
import (
"474420502.top/eson/structure/sparse_array/array3"
)
type HashCode func(key interface{}) int
type EqualsCode func(k1, k2 interface{}) int
type HashMap struct {
growfactor int
table *array3.Array3
GetHash HashCode
IsEquals EqualsCode
}
type Bucket struct {
}
func HashInt(key interface{}) uint {
thekey := uint(key.(int))
hbit := thekey & 0xffffffff
lbit := (thekey & 0xffffffff00000000) >> 32
// log.Println(hbit)
// log.Println(lbit)
// log.Println()
return lbit ^ hbit
}
func New() *HashMap {
hm := &HashMap{}
hm.growfactor = 2
hm.table = array3.NewWithCap(hm.growfactor*2, hm.growfactor, hm.growfactor)
return hm
}
func (hm *HashMap) Put(key, value interface{}) {
hash := hm.GetHash(key)
index := hash % hm.table.Cap()
hm.table.Set(index, value)
}