本文目录导读:

Java标准库中没有直接名为“位图”(Bitmap)的API,但提供了多种高效处理位(bit)操作的类和工具,Java通过以下方式提供了强大的位图操作能力:
BitSet 类 - 最接近的“位图”API
java.util.BitSet 是Java标准库中专门用于位图操作的核心类。
import java.util.BitSet; // 创建位图 BitSet bitSet = new BitSet(64); // 初始化容量 // 设置位 bitSet.set(10); // 设置第10位为true bitSet.set(20, true); // 设置第20位为true // 清除位 bitSet.clear(10); // 清除第10位 // 判断位 boolean b = bitSet.get(10); // false // 批量操作 bitSet.set(10, 20); // 设置10-20位为true bitSet.flip(5, 10); // 翻转5-10位 // 位运算 BitSet another = new BitSet(); another.set(15); bitSet.and(another); // 与运算 bitSet.or(another); // 或运算 bitSet.xor(another); // 异或运算 // 统计 int count = bitSet.cardinality(); // 为true的位数 int length = bitSet.length(); // 最高位索引+1
直接操作字节/整数位
对于需要极致性能的场景,可以直接操作基本类型:
// 操作int的32位 int bitmap = 0; bitmap |= (1 << 5); // 设置第5位 boolean isSet = (bitmap & (1 << 5)) != 0; bitmap &= ~(1 << 5); // 清除第5位 // 操作long的64位 long longBitmap = 0L; longBitmap |= (1L << 40);
第三方位图库
如果需要更高级的位图功能(如压缩位图、稀疏位图等):
-
RoaringBitmap:高性能压缩位图
<dependency> <groupId>org.roaringbitmap</groupId> <artifactId>RoaringBitmap</artifactId> <version>1.0.0</version> </dependency> -
EWAHCompressedBitmap:另一种压缩位图实现
性能对比
| 方案 | 最大容量 | 内存效率 | 性能 | 适用场景 |
|---|---|---|---|---|
| BitSet | 2^31-1 | 中等 | 高 | 通用位图操作 |
| int/long | 32/64 | 极高 | 极高 | 小规模位图 |
| 数组位操作 | 无限制 | 高 | 高 | 自定义实现 |
| RoaringBitmap | 2^32 | 高(压缩) | 极高 | 大数据集/稀疏位图 |
实际应用案例
// 布隆过滤器简单实现
public class SimpleBloomFilter {
private BitSet bitset;
public SimpleBloomFilter(int size) {
this.bitset = new BitSet(size);
}
public void add(String element) {
bitset.set(element.hashCode() % bitset.size());
}
public boolean mightContain(String element) {
return bitset.get(element.hashCode() % bitset.size());
}
}
Java有成熟的位图API(主要是BitSet),但需注意这不是图形学中的“位图图像”,而是计算机科学中的“位数组/位图”数据结构,如果确实需要图像处理(如JPEG/PNG),则需要使用BufferedImage等图像API。