当前位置: 首页 > news >正文

Java实现基于bitmap的字符串去重统计

字符串与整数不同,不能直接用位图表示。本文介绍两种基于bitmap思想的字符串去重统计方法:布隆过滤器和哈希映射法。

## 方法一:布隆过滤器(Bloom Filter)

布隆过滤器是bitmap的扩展应用,它使用多个哈希函数,将每个字符串映射到bitmap的多个位置上。

```java
import java.util.BitSet;
import java.util.function.Function;

public class BloomFilter {
    private BitSet bitmap;
    private int numBits;
    private int numHashes; // 哈希函数数量
    
    // 使用不同的种子计算哈希
    private int hash(String str, int seed) {
        int h = str.hashCode();
        // 使用简单的混合函数与seed结合
        return Math.abs((h ^ seed) % numBits);
    }
    
    public BloomFilter(int size, int hashes) {
        this.numBits = size;
        this.numHashes = hashes;
        this.bitmap = new BitSet(size);
    }
    
    // 将字符串添加到过滤器
    public void add(String str) {
        for (int i = 0; i < numHashes; i++) {
            int pos = hash(str, i);
            bitmap.set(pos);
        }
    }
    
    // 检查字符串是否可能在集合中
    // 返回false表示一定不在,返回true表示可能在
    public boolean mayContain(String str) {
        for (int i = 0; i < numHashes; i++) {
            int pos = hash(str, i);
            if (!bitmap.get(pos)) {
                return false; // 如果有任一位为0,则字符串一定不在集合中
            }
        }
        return true; // 所有位都为1,字符串可能在集合中
    }
    
    // 估计集合中元素数量
    // m = 位数,k = 哈希函数数量,X &

http://www.xdnf.cn/news/542773.html

相关文章:

  • 鸿蒙路由参数传递
  • sqlite
  • Django快速入门篇
  • 基于 ESP32 与 AWS 全托管服务的 IoT 架构:MQTT + WebSocket 实现设备-云-APP 高效互联
  • 2025年渗透测试面试题总结-华顺信安[实习]安全服务工程师(题目+回答)
  • sqlite的拼接字段的方法(sqlite没有convert函数)
  • STL中list的模拟
  • React 第四十三节 Router中 useBlocker 的使用详解及案例注意事项
  • 深入解析Spring Boot与Kafka的集成实践
  • kafka入门(二)
  • [创业之路-369]:企业战略管理案例分析-9-战略制定-差距分析的案例之华为
  • 「华为」持续加码人形机器人赛道!
  • 动态规划之爬楼梯模型
  • 如何将内网的IP地址映射到外网?常见方法及详细步骤
  • 头歌实践平台:动态NAT配置
  • Java虚拟机 - 程序计数器和虚拟机栈
  • DeepSeek-V3 vs GPT-4:技术对比与性能评测
  • php、laravel框架下如何将一个png图片转化为jpg格式
  • 2025年医美行业报告60+份汇总解读 | 附 PDF 下载
  • II-Medical-8B论文速读:课程SFT,DPO和RL 为长思维链推理从无到有
  • 焊接结构动力疲劳计算
  • Nvidia - NVLink Fusion
  • CouchDB 可观测最佳实践
  • ChatGPT助力继续教育自动答题
  • PyTorch进阶实战指南:01自定义神经网络组件开发
  • LLM的应用
  • Java转Go日记(四十四):Sql构建
  • 服务器磁盘不同格式挂载区别
  • Python数据可视化再探——Matplotlib模块 之一
  • python-数据可视化(大数据、数据分析、可视化图像、HTML页面)