java中的Bitset

什么是Bitset

Bitset,也就是位图,由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计上。

基本原理是,用1位来表示一个数据是否出现过,0为没有出现过,1表示出现过。使用的时候既可根据一个是否为0表示此数是否出现过。

1G的空间,有8*1024*1024*1024=8.58*10^9 bit,也就是可以表示85亿个不同的数。

以下内容来自JDK API:

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

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

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

除非另行说明,否则将null参数传递给BitSet中的任何方法都将导致NullPointerException。

在没有外部同步的情况下,多个线程操作一个BitSet是不安全的。

Bitset的使用场景

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

如统计40亿个数据中没有出现的数据,将40亿个不同数据进行排序等。

代码例子

posted @   johnny_zhao  阅读(438)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-06-19 设计模式-桥梁模式
点击右上角即可分享
微信分享提示