最近重读 go语言圣经, 看到6.5节用 bit 数组来实现 set
这样的好处是一个 64 位的 word 值就能存 64 个值, 有效利用内存
但是也想到一些问题
文中的插入的实现是这样, 用 64 来分组, 在以 64 来取模, 分到组里的 bit 位上
直到创建的数组长度大于分组数
但如果现在只存 1 和 一个非常大的数 比如1000000, 那就要在存两个数的时候就创建很多个数组, 内存利用比较低

type BitSet struct {
    words []uint64
}
func (this *BitSet) Add(v int) {
   word, bit := v/64, uint(v%64)
   for word >= len(this.words) {
       this.words = append(this.words, 0)
   }   
   this.words |= 1 << bit 
}

于是乎我想到可以把数组换成 map, 用分组数作为 key, 这样当使用的时候才创建 word 值
避免使用数组时候的浪费

type BitSet struct {
    words map[uint64]uint64
}