Java中BitSet简介说明

戚薇 Java教程 发布时间:2023-07-01 18:56:28 阅读数:1018 1
下文笔者讲述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);//清除位数据  
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202307/6949.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者