首页 > 编程语言 >【BitMap】 java中实现BitMap位图 byte数组实现的bitmap位图

【BitMap】 java中实现BitMap位图 byte数组实现的bitmap位图

时间:2024-11-21 18:57:29浏览次数:1  
标签:java int ids BitMap add num bitmap byte 位图

 

 转载自: https://blog.csdn.net/heshiyuan1406146854/article/details/122687988

 

/**
 * byte数组实现的bitmap
 * 
 * @author SXD
 * @date 2024/11/21
 */
public class MyBitmap {
    private byte[] buckets;

    public MyBitmap(int maxNum) {
        this.init(maxNum);
    }

    private void init(int maxNum) {
        int maxBucketIndex = this.getBucketIndex(maxNum);
        this.buckets = new byte[maxBucketIndex + 1];
    }

    public void add(int num) {
        int bucketIndex = this.getBucketIndex(num);
        int bitIndex = this.getBucketInnerBitIndex(num);
        this.buckets[bucketIndex] |= 1 << bitIndex;
    }

    public boolean contains(int num) {
        int bucketIndex = this.getBucketIndex(num);
        int bitIndex = this.getBucketInnerBitIndex(num);
        return (this.buckets[bucketIndex] & 1 << bitIndex) != 0;
    }

    private int getBucketIndex(int num) {
        return num >> 3;
    }

    private int getBucketInnerBitIndex(int num) {
        return num & 0x07;
    }
}

 

 

测试:

 MyBitmap bitmap = new MyBitmap(1000);
        List<Integer> ids = new ArrayList<>();
        ids.add(1);
        ids.add(2);
        ids.add(3);
        ids.add(15);
        ids.add(23);
        ids.add(24);
        ids.add(25);
        ids.add(30);
        ids.add(49);
        ids.add(50);
        for (Integer id : ids) {
            bitmap.add(id);
            for (int i = 1; i <= 50; i++) {
                if (bitmap.contains(i)) {
                    System.out.println(i + "存在");
                } else {
                    System.out.println(i + "不存在");
                }
            }
        }

 

标签:java,int,ids,BitMap,add,num,bitmap,byte,位图
From: https://www.cnblogs.com/sxdcgaq8080/p/18561345

相关文章

  • java中的异常,异常处理
    什么是异常?异常是程序运行过程中所遇到的错误或者不正常的情况,可能会导致程序终止或者出错。在Java中所有的异常都继承自一个throwable的类,它有error和exception两个子类,而且分为编译错误和运行时错误。为什么需要异常处理?出现异常后,导致程序后的代码都无法执行。从而造成......
  • 点餐管理系统设计与实现(Java+SpringBoot+MySql)
              目录第1章 绪论1.1选题动因1.2目的和意义1.3论文结构安排第2章 开发环境与技术2.1MySQL数据库2.2 Tomcat介绍2.3 vue技术2.4 SpringBoot框架第3章 系统分析3.1可行性分析3.1.1操作可行性分析3.1.2经济可行性分析......
  • 【Flinkcdc问题解决】java.lang.NoClassDefFoundError: org/apache/flink/shaded/guav
    1.环境介绍Flink1.17+Flinkcdc2.2.12.问题描述使用Flink1.17和Flinkcdc2.2.1环境进行数据加工,但是报以上错误,原因是版本不匹配,flinkcdc2.2.1用的是guava18,但是flink1.17用的是guava30,导致冲突。3.问题解决添加flink-sql-connector-mysql-cdc依赖<dependen......
  • JavaScript网页设计案例:动态交互与用户体验提升
        随着前端开发技术的不断发展,JavaScript已经成为现代网页设计中不可或缺的工具。通过JavaScript,开发者可以为用户提供更为流畅、动态的交互体验,让网页不仅具备美观的视觉效果,更能提高用户的参与感和功能实用性。    本文将通过一个实际案例展示如何使用JavaS......
  • Java中子类构造时可以做的事
    在Java中,当子类的构造方法运行时,第一行默认会调用父类的构造方法(隐式调用super()),或者由显式调用指定的父类构造方法(如super(args...))。这是Java语言规范的一部分,目的是确保在子类实例化之前,父类部分的初始化能够完成。虽然这种调用机制是固定的,但仍有一些方式可以在构造方......
  • 【老白学 Java】Warship v2.0(一)
    Warshipv2.0(一)文章来源:《HeadFirstJava》修炼感悟。上一篇,简版的「Warship」项目终于完工。从本章开始,老白准备在简版基础上进行升级改造,逐步打造出「Warshipv2.0」。开篇前,老白先介绍一下「数组列表」对象,它是这个项目不可缺少的重要工具。如果师兄们感兴趣,可以......
  • Java批量解析微信dat文件,微信图片
    以下是java代码,直接可用,不用手动计算异或值此处的jdk版本需要1.8以上…,另外两个参数(解析文件路径和输出路径)需要改成自己的哦~此处的原理是判断图片文件的十六进制特征码。第一种:weChatImgRevert.javapackagecom;importjava.io.File;importjava.io.FileInputStream;impor......
  • Java从入门到放弃之 IO (三)------- 绝对看的懂,看不懂欢迎私信
    Java从入门到放弃之IO(三)Java从入门到放弃之IO(三)装饰器模式问题背景解决方案就是引入装饰器模式IO流关闭问题Java从入门到放弃之IO(三)装饰器模式在上一篇我们引入了装饰器模式的定义。那么这一章我们进一步,装饰器模式解决什么问题?以及为什么JavaIO要使用装......
  • JAVA ClassLoader机制
    概要说明注:本篇文章是网上多篇文章的缝合,把我觉得写的不错的,对我理解ClassLoader有帮助的内容写到博客中,同时我尽量让一些学Java安全的同学更详细的学习ClassLoader。参考文章(1):https://www.cnblogs.com/luckforefforts/p/13642685.html-简短,可以快速了解ClassLoader概念和双......
  • Java爬虫与淘宝API接口:高效数据采集的结合
    目录引言一、淘宝API接口介绍二、请求淘宝API接口三、解析淘宝API返回的JSON数据四、存储淘宝商品数据五、注意事项结语引言在数字化时代,数据的价值日益凸显,尤其是在电商领域。淘宝作为中国最大的电商平台之一,拥有海量的商品数据。对于开发者而言,如何高效、准确地从......