java bitset 应用_Java BitSet使用场景和示例

一、什么是BitSet?

注:以下内容来自JDK API:

BitSet类实现了一个按需增长的位向量。位Set的每一个组件都有一个boolean值。用非负的整数将BitSet的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet修改另一个 BitSet的内容。

默认情况下,set 中所有位的初始值都是false。

每个位 set 都有一个当前大小,也就是该位 set 当前所用空间的位数。注意,这个大小与位 set 的实现有关,所以它可能随实现的不同而更改。位 set 的长度与位 set 的逻辑长度有关,并且是与实现无关而定义的。

二、使用场景

常见的应用场景是对海量数据进行一些统计工作,比如日志分析、用户数统计等。

之前在阿里的实习面试就被问到一道题:有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来?

代码示例如下:

public classAlibaba

{public static voidmain(String[] args)

{

Random random=newRandom();

List list=new ArrayList<>();for(int i=0;i<10000000;i++)

{int randomResult=random.nextInt(100000000);

list.add(randomResult);

}

System.out.println("产生的随机数有");for(int i=0;i

{

System.out.println(list.get(i));

}

BitSet bitSet=new BitSet(100000000);for(int i=0;i<10000000;i++)

{

bitSet.set(list.get(i));

}

System.out.println("0~1亿不在上述随机数中有"+bitSet.size());for (int i = 0; i < 100000000; i++)

{if(!bitSet.get(i))

{

System.out.println(i);

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值