RoaringBitmap等工具类的使用,以及搜索算法

印子平
2023-12-01


java自带的bitset只提供了基本的功能,不算很强大。所以实际开发中要借助其他类库,例如RoaringBitmap。

RoaringBitmap在方法的丰富性上,以及性能上都有提高。

maven引入

第2个是roaringbitmap,但是一块贴上了啊。

<dependency>
    <groupId>uk.gov.gchq.gaffer</groupId>
    <artifactId>bitmap-library</artifactId>
    <version>1.21.1</version>
</dependency>
<dependency>
    <groupId>org.roaringbitmap</groupId>
    <artifactId>RoaringBitmap</artifactId>
    <version>0.9.22</version>
</dependency>

RoaringBitmap 基本用法,包括文件流

public static void main(String[] args) throws Exception{
    String filePath="d://bit.txt";
    RoaringBitmap roaringBitmap = new RoaringBitmap ();
    roaringBitmap.add(1);
    roaringBitmap.add(20000);
    serialize(roaringBitmap,filePath);

    RoaringBitmap deserialize = deserialize(filePath);
    // RoaringBitmap 最大的特点就是 带有压缩,例如 添加一个很大的数,基数不会跳跃
    logger.info("getCardinality:{}",deserialize.getCardinality());
}

// 序列化 保存
public static void serialize(RoaringBitmap  roaringBitmap,String filePath) throws IOException {
    roaringBitmap.serialize(new DataOutputStream(new FileOutputStream(filePath)));
}

// 反序列化  读取
public static RoaringBitmap deserialize(String filePath) throws IOException {
    RoaringBitmap  roaringBitmap = new RoaringBitmap ();
    roaringBitmap.deserialize(new DataInputStream(new FileInputStream(filePath)));
    return roaringBitmap;
}

其他工具类

还有很多,如:
ArrayContainer
RunContainer

搜索算法数据库设计

数据库设计可以为

t_bitset
category 大类(如性别,设备类型等)
type 类型(如男、女,android、ios等)
fileName 文件名
filePath 文件路径

 类似资料: