Java中BitSet简介说明
下文笔者讲述BitSet简介说明,如下所示
BitSet简介
BitSet 即位图 是一个很长的“0/1”序列 他只能存储0或1,他的数据按位存储, 采用这种模式导致Java中存储数比int节省空间 如: 一个int数存储只需4字节,32位 但是使用BitSet存放只需一位 如: {2,4,6,8} 这四个数存储,需要4个int (32*4)bit 当我们使用bitSet,只需{...1,0,1,0,1,0,1],我们只需使用最大一个数的bit位即可 存储下这么多数字 BitSet简介: BitSet初始大小为1个long的大小 即8字节64个bit 当我们创建BitSet指定位数 系统会根据情况取成64的整数倍个bit 即整数个long的位数
BitSet的使用场景
BitSet适合用于 无重复,整数 常用于大数据场景或日志统计 如: 当有10亿条URL中检测一个“www.java265.com/a” 是否存在, 如果我们使用hashmap来保存是不可取 因为URL本身需要占据较多的内存而无法直接操作 此时我们只能使用bitset来保存 我们只需计算一条URL的hashcode 并将数字映射在bitset上 则使用bitset上的一个位标识url存在性
BitSet原理
Java中 一个long型数字占用64位空间 那么一个long型数字(4个字节)可保存64个数字的“存在性”状态(无碰撞冲突时,即true、false状态) 如: 50个数字{0,1,10,…63},判定“15”是否存在 那么我们通常会首先将这些数字使用数组或hashmap保存 然后再去判定 那么保存这些这些数据需要占用64 * 64位 如果使用位图,那么一个long型数字即可 (如果换成50个字符串,那么其节约空间可能更大) BitSet注意事项: BitSet只能用于数字比较,如判断数字存在性BitSet示例
BitSet bitSet = new BitSet(Integer.MAX_VALUE);//hashcode的值域 //0x7FFFFFFF String url = "http://java265.com/a"; int hashcode = url.hashCode() & 0x7FFFFFFF; bitSet.set(hashcode); System.out.println(bitSet.cardinality());//着色位的个数 System.out.println(bitSet.get(hashcode));//检测存在性 bitSet.clear(hashcode);//清除位数据
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。