📝 位图(BitMap)实现
1. 位图简介 🧩
位图(BitMap)是一种高效的数据结构,用于存储和操作位(bit)数据。每个位可以表示一个布尔值(0 或 1),常用于去重、排序、快速查找等场景。
2. 核心功能 ⚙️
- 设置位(Set):将某一位设置为
1。 - 清除位(Clear):将某一位设置为
0。 - 获取位(Get):检查某一位是否为
1。 - 打印位图(Print):以二进制形式打印位图。
3. 代码实现 💻
package MyStruct;
import lombok.Data;
/**
* @Author:丁浩然
* @Package:MyStruct
* @Project:leetcode_algorithm
* @name:MyBitMap
* @Date:2025/2/18 2:53
* @Filename:MyBitMap
* @Purpose:实现一个简单的位图(BitMap)数据结构,用于高效地存储和操作位数据。
*/
@Data
public class MyBitMap {
// 位图数据存储在一个字节数组中,每个字节可以存储8位
public final byte[] bits;
/**
* 构造函数,初始化位图
*
* @param size 位图的大小(位数)
*/
public MyBitMap(int size) {
// 计算需要的字节数,每个字节可以存储8位
// 例如,size=16需要2个字节,size=17需要3个字节
bits = new byte[(size + 7) / 8];
}
/**
* 将指定位置的位设置为1
*
* @param pos 要设置的位置(从0开始)
*/
public void set(int pos) {
// 计算字节索引:pos / 8
int index = pos / 8;
// 计算位偏移:pos % 8
int offset = pos % 8;
// 使用位操作符 | 将特定位设置为1
bits[index] |= (1 << offset);
}
/**
* 将指定位置的位设置为0
*
* @param pos 要清除的位置(从0开始)
*/
public void clear(int pos) {
// 计算字节索引:pos / 8
int index = pos / 8;
// 计算位偏移:pos % 8
int offset = pos % 8;
// 使用位操作符 & 和 ~ 将特定位设置为0
bits[index] &= ~(1 << offset);
}
/**
* 获取指定位置的位值
*
* @param pos 要获取的位置(从0开始)
* @return 如果该位为1,返回true;否则返回false
*/
public boolean get(int pos) {
// 计算字节索引:pos / 8
int index = pos / 8;
// 计算位偏移:pos % 8
int offset = pos % 8;
// 使用位操作符 & 检查特定位是否为1
return (bits[index] & (1 << offset)) != 0;
}
/**
* 打印位图的二进制表示
*/
public void print() {
for (int i = 0; i < bits.length; i++) {
// 将字节转换为8位二进制字符串,高位补0
String binaryString = String.format("%8s", Integer.toBinaryString(bits[i] & 0xFF)).replace(' ', '0');
// 打印每个字节的二进制表示
System.out.println(binaryString);
}
}
}
4. 流程图 📊
以下是位图操作的流程图,使用 Mermaid 绘制:

5. 示例运行 🚀
public class Main {
public static void main(String[] args) {
// 创建一个大小为16的位图
MyBitMap bitMap = new MyBitMap(16);
// 设置第3位和第5位为1
bitMap.set(3);
bitMap.set(5);
// 打印位图的二进制表示
bitMap.print();
// 获取第3位和第4位的值
System.out.println("Bit at position 3: " + bitMap.get(3));
System.out.println("Bit at position 4: " + bitMap.get(4));
// 清除第3位
bitMap.clear(3);
// 再次获取第3位的值
System.out.println("Bit at position 3 after clear: " + bitMap.get(3));
}
}
6. 输出结果 📄

7. 总结 🎯
- 位图是一种高效的数据结构,适合处理大量布尔值。
- 通过位操作符(
|、&、~、<<)可以快速设置、清除和检查特定位。
809

被折叠的 条评论
为什么被折叠?



