//  hash value between 0 and M-1
func (st *SeparateChainingHashST) hash(key string) uint32 {
	h := dgohash.NewJava32()
	h.Write([]byte(key))
	bsum := h.Sum(nil)
	s := binary.BigEndian.Uint32(bsum)
	res := s & uint32(st.m-1)
	return res
}
//  hash value between 0 and M-1
func (st *LinearProbingHashST) hash(key string) int {
	h := dgohash.NewJava32()
	h.Write([]byte(key))
	bsum := h.Sum(nil)
	s := binary.BigEndian.Uint32(bsum)
	res := int(s & uint32(st.m-1))
	//fmt.Println("key", key, "hash", res)
	return res
}