赞
踩
package bitmap; import java.util.BitSet; /** * 要求: 有1千万个随机数,分布在1 到 1亿之间,需要找出1 到 1亿不存在的数据,即随机剩下的9千万数据 * * 使用java的bitSet集合 * * bitSet是Long类型,每一个组是64bit * bitMap是int类型,每一个组32bit * * 注意:bitSet不能存负数,只能存0以上的并且在Long类型范围内的正整数 */ public class BitSetTest { public static void main(String[] args) { // 这个初始化128,会在里面生成一个128个桶的Long类型的数组,所以一共有128 * 64 个bit位,也就是一共能标记出128 * 64个整数是否存在 // 不指定默认64 BitSet bitSet = new BitSet(128); bitSet.set(0); bitSet.set(66); // 输出bitSet大小,应该是128,因为66大于64,所以需要第二个Long位,每个Long位是64,2个就是128 System.out.println("bitSet大小: " + bitSet.size()); // 这个是bit位的长度,是最大的那个数字+1,即67 System.out.println("bitSet长度: " + bitSet.length()); // 查询出有多少个为1的位,显然我们只存了0和66,只有俩,所以结果就是2 System.out.println("bitSet中存在多少数字" + bitSet.cardinality()); // 读取bit位 = 0的下标, 返回true,说明存数据了,即该位的值 = 1,因为bitSet.set(0), // 把0存到了第0位,这是必然的,0一定是存到下标位0的位置,这是规则,不需要认为指定 System.out.println("0是否存在: " + bitSet.get(0)); // 读取bit位 = 1的下标,返回false, 说明该位没有存数据,即没有存数字1,所以该位的值 = 0, 表示1这个数字不存在 System.out.println("1是否存在: " + bitSet.get(1)); System.out.println("66是否存在: " + bitSet.get(66)); } }
输出:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。