# Java中的位向量(bitVector)、位集(bitset)和位图(bitmap)
在Java中,位向量(bitVector)、位集(bitset)和位图(bitmap)是三种常用的数据结构,用于表示和操作二进制位(bit)。它们都提供了高效地存储和查询大量的布尔值的方法,适用于各种应用场景。
## 位向量(BitVector)
位向量是一种使用位来表示布尔值的数据结构。它通常是一个由            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-01-03 10:36:17
                            
                                129阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            前些日子需要写一个有限域上多项式计算的程序,考虑使用Java的BitSet来表示多项式,但Java Doc里面对各种API的表现都语焉不详,索性去看了一下java.util.BitSet的源代码。BitSet的实现BitSet是使用一个long类型的数组实现的,如下:java.util.BitSet
Java
/*
* BitSets are packed into arrays of "word            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-13 22:08:26
                            
                                98阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            ## 实现 Redis Bitset Bitmap 的流程
在教会刚入行的小白如何实现 "Redis Bitset Bitmap" 之前,让我们先来了解一下 Redis Bitset Bitmap 是什么。
### 什么是 Redis Bitset Bitmap?
Redis Bitset Bitmap 是 Redis 中的一种数据结构,用于存储和操作位集合(bit set),它可以将每个位            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-10-07 04:44:45
                            
                                57阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一些处理大数据类的算法中要用到bitmap思想Java中也有对应的实现,java.util.BitSet,完全是为这个量身定做的java类,大家用的时候要当心。另外BitSet是非线程安全的,需要外部同步。//创建一个具有10000000位的bitset 初始所有位的值为false  
        java.util.BitSet bitSet = new java.util.BitSet(1            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-11 07:43:20
                            
                                48阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            BisSet 源码
    这几天看Bloom Filter,因为在java中,并不能像C/C++一样直接操纵bit级别的数据,所以只能另想办法替代:1)使用整数数组来替代;2)使用BitSet;BitSet实际是由“二进制位”构成的一个Vector。如果希望高效率地保存大量“开-关”信息,就应使用BitSet。它只有从尺寸的角度看才有意义;如果希望的高效率的访            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-01 11:51:09
                            
                                56阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            BitMap是什么就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省储存空间。Redis中的BitMapRedis从2.2.0版本开始新增了setbit,getbit,bitcount等几个bitmap相关命令。虽然是新命令,但是并没有新增新的数据类型,因为setbit等命令只不过是在set上的            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-09 06:49:09
                            
                                105阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             原理众所周知,Java的BitSet使用一个Long(一共64位)的数组中的每一位(bit)是否为1来表示当前Index的数存在不。但是BitSet又是如何实现的呢?其实只需要理解其中的两个方法:setget就能够理解BitSet的实现原理是什么了。set先看源代码:public void set(int bitIndex) {
    if (bitIndex < 0)            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-27 15:34:55
                            
                                58阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            首先需要说明的是,BitSet并不属于集合框架,没有实现Collection或Map接口。但因为其与List有一定类似性,所以这里一并列拿出来研究。BitSet类实现了一个按需增长的位向量。每个位都有一个boolean值,用非负的整数将BitSet的位编入索引。可以对每个编入索引的位进行查找、设置或者清除。默认情况下,所有位的初始值都是false。BitSet非线程安全,在单线程情况下使用。Bit            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-04 13:59:45
                            
                                104阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            BitSet 简单说明在内存中是一串连续的内存空间,从0开始的正整数按位操作,每一位的值只有两种 0 或者 1,来表示某个值是否出现过。2:简单使用把 1 3 5 三个数放bitSet中   BitSet bitSet=new BitSet();    bitSet.set(1);bitSet.set(3);            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-23 17:25:49
                            
                                182阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            bitmap : Bit-map的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,可以很大力度的节省空间,常用于对大量整数做去重和查询操作。bitset : BitSet就是实现了Bit-Map算法。BitSet位于java.util包下,从JDK1.0开始就已经有了。该类实现了一个按需增长的位向量。位集的每一个组件都有一个boole            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-16 15:29:09
                            
                                137阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            参考:java.util.BitSetJava BitSet类查看类 ArrayList 中 removeIf 方法源码时,发现其使用 BitSet 类来存储待删除的元素下标之前没有接触过这个类,了解之后发现其在数据查询和存储方面有很大用处主要内容:
BitSet 浅析类变量和常量构造器set
clear -(2)get
flip - (3)valueOf位运算(and, andNot, or,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-18 18:11:23
                            
                                38阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            查看类 ArrayList 中 removeIf 方法源码时,发现其使用 BitSet 类来存储待删除的元素下标之前没有接触过这个类,了解之后发现其在数据查询和存储方面有很大用处主要内容:
BitSet 浅析类变量和常量构造器set
clear -(2)get
flip - (3)valueOf位运算(and, andNot, or, xor)next
previous - (4)判空 / 判断交            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-05 23:22:12
                            
                                54阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本。本博客将从源码角度带领大家学习关于HashSet的知识。一HashSet的定义:public class HashSetextends AbstractSetimplements Set, Cloneable, java.io.Serializable可以看到HashSet继承自AbstractSet同时实现了Set,Clon            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-26 22:02:37
                            
                                9阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            (1)BitSet类 大小可动态改变, 取值为true或false的位集合。用于表示一组布尔标志。 此类实现了一个按需增长的位向量。位 set 的每个组件都有一个 boolean 值。用非负的整数将 BitSet 的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet 修改另一个 BitSet 的内容。 默认情况下,set 中所有位            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-26 11:52:35
                            
                                47阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、什么是BitSet?  注:以下内容来自JDK API:BitSet的内容。   默认情况下,set 中所有位的初始值都是false。   每个位 set 都有一个当前大小,也就是该位 set 当前所用空间的位数。注意,这个大小与位 set 的实现有关,所以它可能随实现的不同而更改。位 set 的长度与位 set 的逻辑长度有关,并且是与实现无关而定义的。             
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-05 23:23:28
                            
                                10000+阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            参考:java.util.BitSetJava BitSet类查看类 ArrayList 中 removeIf 方法源码时,发现其使用 BitSet 类来存储待删除的元素下标之前没有接触过这个类,了解之后发现其在数据查询和存储方面有很大用处主要内容:
BitSet 浅析类变量和常量构造器set
clear -(2)get
flip - (3)valueOf位运算(and, andNot, or,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-14 22:09:55
                            
                                105阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            (1)BitSet类    大小可动态改变, 取值为true或false的位集合。用于表示一组布尔标志。   此类实现了一个按需增长的位向量。位 set 的每个组件都有一个 boolean 值。用非负的整数将 BitSet 的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet 修改另一个 BitSet            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-22 16:18:56
                            
                                67阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            我们知道Android系统分配给每个应用程序的内存是有限的,Bitmap作为消耗内存大户,我们对Bitmap的管理稍有不当就可能引发OutOfMemoryError,而Bitmap对象在不同的Android版本中存在一些差异,今天就给大家介绍下这些差异,并提供一些在使用Bitmap的需要注意的地方。在Android2.3.3(API 10)及之前的版本中,Bitmap对象与其像素数据是分开存储的,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-03 11:43:29
                            
                                46阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1. Bit-map的基本思想  32位机器上,对于一个整型数,比如int a=1 在内存中占32bit位,这是为了方便计算机的运算。但是对于某些应用场景而言,这属于一种巨大的浪费,因为我们可以用对应的32bit位对应存储十进制的0-31个数,而这就是Bit-map的基本思想。Bit-map算法利用这种思想处理大量数据的排序、查询以及去重。  Bitmap在用户群做交集和并集运算的时候也有极大的便            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-31 00:55:14
                            
                                116阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             该类在java的java.util包中。BitSet类的原理主要是利用long型有64个bit,每个bit存储一个数值,这样一个long型数字就能存储64个数字,进而节省了空间。接下来我们开始讲解该类的代码。我们先看一下该类的成员变量:/*
      * BitSets are packed into arrays of "words."  Currently a word is            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-24 21:43:52
                            
                                54阅读