闲话
跟BitSet缠了好几天,书上介绍的甚少,过了好几遍文档,和java的BitSet相比,可以像Set一样地操纵的设计更合理,但总觉得少了很多有用的方法,和其他Set相比,可能大数据量时效率提升明显,但使用者很难接触到底层的结构(java的BitSet并没有这样),很难作用最大化,曾无数次给我一种用了假BitSet的感觉,所以说的不对的,还请大家不吝赐教!
从实例出发
实现算法:一千万个随机数,随机数范围在1到1亿之间,现在要求写出一种算法,将1到1亿之间没有出现的随机数求出来
Version 1 最简单的实现
没有考虑大数据集的问题,效率可想而知
var bit:BitSet=BitSet()
var bat:BitSet=BitSet()
for(i<-1 to 100){
bit+=i
}
for(i<-1 to 10 ){
bat+=(new Random).nextInt(100)//随机数没要求是不重复的
}
val c:BitSet=bit--bat
println(c)
Version 2 速度最快,但不准确
并行计算的效率让我欣喜若狂(超级快),但在这里出现了最多的问题,有些甚至至今仍未解决
var bit: BitSet = BitSet(100000000)