位向量工作原理

124次

问题描述:

位向量工作原理

推荐答案

2023-10-24 15:25:13

位向量,也叫位图,是一个我们经常可以用到的数据结构,在使用小空间来处理大量数据方面有着得天独厚的优势;位向量的定义就是一串由0.1组成的序列。

Java中对位向量的实现类时Java.util.BitSet;C++标准库中也有相应的实现,原理都是一样的; BitSet源码也很简单,很容易看懂 ,如果读者在对位向量有一定的了解后,可以通过读源码来了解BitSet的具体实现。

一个bit上有两个值,正好可以用来判断某些是非状态的场景,在针对大数据场景下判断存在性,BitSet是相比其他数据结构比如HashMap更好的选择,在Java中,位向量是用一个叫words的long型数组实现的,一个long型变量有64位,可以保存64个数字;比如我们有[2,8,6,10,15]这5个数要保存,一般存储需要 5*4 = 20字节的存储空间。但是如果我们使用Java.util.BitSet进行存储则可以节省很多的空间只需要一个long型数字就够了。BitSet只面向数字只面向数字使用,对于string类型的数据,可以通过hashcode值来使用BitSet。

由于,1 << 64, 1<<128, 1<<192 这些数字的结果都为1,BitSet内部,long[]数组的大小由BitSet接收的最大数字决定,这个数组将数字分段表示[0,63],[64,127],[128,191]...。即long[0]用来存储[0,63]这个范围的数字的“存在性”,long用来存储[64,127],依次轮推,这样就避免了位运算导致的冲突。原理如下:

|------------|----------|----------|----------|----------| |

Java的BitSet每次申请空间,申请64位,即一个long型变量所占的位数;

其他答案

2023-10-24 15:25:13

位向量(bit vector)就是由一些二进制位组成的向量。

位向量可以用很少的内存来存储Boolean变量。某些并行机中增加了"目录存储器",存储器的每一页在目录存储器中有一项,每一个目录项主要有"状态"和"位向量"两种成分。"状态"描述该目录对应存储页的当前情况,如在其他Cache中是否有拷贝等;"位向量"的每一位对应一个处理器的局部Cache,共有N位,每一位用来指示对应的Cache有无该存储页的拷贝。这样,当处理器对某一页进行写操作时,只要根据位向量通知具有相应拷贝的对象,而这些对象的个数n一般比系统的规模小得多,而与系统规模大小N无关,这就支持了系统的可扩展性。

知道问答相关问答

(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6