仿写BitMap源码

news2024/7/4 4:50:18

bitmap的作用:
用来校验海量数字中某一个数字有没有出现过,海量数据中某一个数据有没有出现过
做一个长的比特数组,比特数组就会出现索引(0n),所有0n之间的数,比如123,就把所有比特数组中索引为123的位置,由0变为1;看这个数有没有出现在比特数组中,看是0还是1;0没有出现过,1出现过;
getIndex()方法)byte数组中每一个都代表八位;做value>>3只是确定了0,1,2,3,4,5的位置,但是不知道在里边的空里是多少;
getPosition()方法:决定了在后面1~8中的哪个位置

private int getPosition(int value){
   // return value%8;
    return value & 0x07;
}

在这里插入图片描述
byte[] bits = new byte[2];
比如说:添加13
13/8 = 1;确定了索引为1的一行的内容
13>>3; 13的二进制数是:1101 - - - > 0001
13%8 = 5;确定了是在此行的第五个位置
13 & 0x07
13 = 1101
0x07 = 0111
与操作= 0101
所以说13的位置 bits[13>>3] | 1<<(13&0x07)
1<<(13&0x07) = 1 << 5 = 0001 << = 00100000
假如说原来就是0 :00000000
或操作:00100000

package com.BitMap;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

/**
 * @author lenovo
 * @date 2022/12/03
 */
public class MyBitMap {
    private byte[] bits;
    //byte数组中每一个数字都要代表八位

    public static final int DEFAULT_CAPACITY = 1<<10;//最大容量是1左移10位

    public MyBitMap(){
        this.bits = new byte[DEFAULT_CAPACITY];
        //System.out.println(bits.length);//输出一下1左移10位的数字是多少
    }

    public static void main(String[] args) {
        MyBitMap map = new MyBitMap();
        Set<Integer> set = new HashSet<Integer>();
        Random random = new Random();
        for (int i = 0 ;i<800;i++){
            int i1 = random.nextInt(DEFAULT_CAPACITY);
            map.add(i1);
            set.add(i1);
        }
        for (int i = 100; i < 300; i++) {
            boolean contains = map.contains(i);
            if (contains){
                //用已知的set 来确定这个Map写的没问题
                if (set.contains(i)){
                    System.out.print(i + " is contains by set!!! ");
                }
                System.out.println(i + " is contains!!! ");
            }
            else {
                if (!set.contains(i)){
                    System.out.print((i + " is not contains by set !!!"));
                }
                System.out.println(i + " is not contains!");
            }
        }
    }

    public void add(int value){
        //找到value值在byte数组中的位置是在哪里
        int index = getIndex(value);
        //求余
        int position = getPosition(value);
        bits[index] |=1<<position;
    }

    public boolean contains(int value){
        int index = getIndex(value);
        int position = getPosition(value);
        return (bits[index] & 1<<position) != 0;
    }

    private int getPosition(int value){
       // return value%8;
        return value & 0x07;
    }

    //找到value值当前所在数组中的位置
    private int getIndex(int value){
        // return value/8;
        return value>>3;
        //byte数组每个数字代表八位,除以8就可以得到数组里边的位置
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言画ROC曲线总结

在本文中&#xff0c;我描述了如何在CRAN中搜索用于绘制ROC曲线的包&#xff0c;并重点介绍了六个有用的包。 我使用pkgsearch来搜索CRAN并查看其中的内容。该package_search()函数将文本字符串作为输入&#xff0c;并使用基本的文本挖掘技术来搜索所有CRAN。 经过一番尝试和…

【Clickhouse】Clickhouse 精确去重计数性能测试

1.概述 4亿多的数据集上,去重计算出6千万整形数值, 非精确去重函数: uniq、 uniqHLL12、 uniqCombined 精确去重函数: uniqExact、 groupBitmap 结论: 整形值精确去重场景, groupBitmap 比 uniqExact至少快 2x+groupBitmap仅支持整形值去重, uniqExact支持任意类型去重…

中英文说明书丨艾美捷CD8α体内抗体介绍

艾美捷CD8α体内抗体英文说明&#xff1a; ICH1045 is up to 30% cheaper for academia & non-profits and up to 55% cheaper for industry than the equivalent product from Bio X Cell (BE0061). ICH1045UL is up to 31% cheaper for academia and up to 56% cheaper …

javaweb-Servlet的使用

xml设置 创建项目需要勾选下图的创建xml(适用于3.0以下版本,3.0以上的可以跳过使用下面的注解开发) 创建完项目后,找到web—WEB-INF—web.xml配置以下代码 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/…

隔离系列 宽电压输入 正负高电压稳压输出 高压稳压电源模块

特点 效率高达 80%以上1*2英寸标准封装电源正负双输出稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上应用 HRA 1~40W系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、9~18V、及18~36VDC标准&…

使用SAS,Stata,HLM,R,SPSS和Mplus的多层线性模型HLM

简介 最近我们被客户要求撰写关于多层线性模型的研究报告&#xff0c;包括一些图形和统计输出。本文档用于比较六个不同统计软件程序&#xff08;SAS&#xff0c;Stata&#xff0c;HLM&#xff0c;R&#xff0c;SPSS和Mplus&#xff09;的两级多层&#xff08;也称分层或层次&…

8年软件测试开发薪水被应届生倒挂,32岁的我裸辞了...

今年 32 岁&#xff0c;我从公司离职了&#xff0c;是裸辞。 前段时间&#xff0c;我有一件事情一直憋在心里很难受&#xff0c;想了很久也没找到合适的人倾诉&#xff0c;就借着今天写出来。 我一个十几年测试经验&#xff0c;八年 软件测试 经验的职场老人&#xff0c;我慢…

Docker运行MySQL容器

目录 一、宿主机与容器之间的文件拷贝 1.利用MySQL镜像安装MySQL服务 2.容器中怎么上传项目&#xff08;文件&#xff09; 3.从容器中拷贝文件到宿主机 4.从宿主机拷贝文件到容器 二、数据卷 三、数据卷容器 四、Dockerfile 本次目标&#xff1a; 数据卷Dockerfile …

C++初阶作业 Stackqueue 作业题一

作者&#xff1a;小萌新 专栏&#xff1a;C初阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;实现几道Stack和queue的作业题 Stack queue作业题最小栈问题栈的压入弹出序列逆波兰表达式问题总结最小栈问题 它问题的题目描述是这…

Kafka极客 - 13 Kafka 中的高水位和 Leader Epoch 机制

文章目录1. 什么是高水位&#xff1f;2. 高水位的作用3. 高水位更新机制1. Leader 副本高水位更新机制2. Follower 副本高水位更新机制4. 副本同步机制解析5. Leader Epoch你可能听说过高水位&#xff08;High Watermark&#xff09;&#xff0c;但不一定耳闻过 Leader Epoch。…

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【03】前端开发基础知识:ES6_Vue

持续学习&持续更新中… 学习态度&#xff1a;守破离 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【03】前端技术栈类比ES6简介什么是ECMAScriptES6新特性let、const解构表达式字符串扩展字符串模板函数优化对象优化map、reducePromise&#xff08;异步编排&#xff…

第十四届蓝桥杯集训——JavaC组第十一篇——switch

第十四届蓝桥杯集训——JavaC组第十一篇——switch 目录 第十四届蓝桥杯集训——JavaC组第十一篇——switch swtich概述 switch语法 default作用 switch基础示例&#xff1a; String类型switch示例 switch枚举判断 巧用break 石头剪刀布 测试代码&#xff1a; swtich概…

安卓计算机毕设——无线点餐系统

1 绪 论 1.1 研究的背景及意义 民以食为天。餐饮业是一种个性化、多样化的服务产业&#xff0c;餐饮传统的点菜方式是纯人工操作&#xff0c;由服务员记录顾客点的菜&#xff0c;在具体工作中容易出现以下问题&#xff1a;手写单据字迹潦草从而导致上错菜、传菜分单出错现象严…

pytest学习和使用-fixture如何使用?

1 引入 和setup、teardown的区别是&#xff1a;fixture可自定义测试用例的前置条件&#xff1b; setup、teardown针对整个脚本全局生效&#xff0c;可实现在执行用例前后加入一些操作&#xff1b; setup、teardown不能做到灵活使用&#xff0c;比如用例A先登陆&#xff0c;用…

【毕业设计】微信失物招领小程序 失物招领微信小程序

一、前言 生活中&#xff0c;很多人都有丢失物品的经历&#xff0c;随着互联网的快速发展&#xff0c;你可以在各种地方信息平台来发布丢失说明。但是这些信息往往会随着平台的发布量被刷掉&#xff0c;想要找回丢失的东西还是很困难的。只需要打开微信即可使用失物招领小程序…

软件测试丨基于Junit4,利用xUnit框架让你的测试用例可维护性大幅提升

xUnit是一系列测试框架的统称&#xff0c;最开始来源于一个叫做Smalltalk的SUnit框架。 现在各种面向对象的语言&#xff0c;如Java、Python的鼻祖就是Smalltalk&#xff0c;后来这些语言都借助了Sunit框架的理念&#xff0c;有很多通用的规范和特征&#xff0c;也就统称为xUn…

C. Hossam and Trainees(欧拉筛 + 分解质因数)

Problem - C - Codeforces 胡萨姆有n名学员。他给第i个学员分配了一个号码。 如果存在一个整数x (x≥2)&#xff0c;使得x能整除ai, x能整除aj&#xff0c;则第i个和第j个(i≠j)练习者被称为成功练习者。 胡萨姆想知道是否有一对成功的学员。 胡萨姆现在很累了&#xff0c;所以…

推荐一个平台,JNPF开发平台3.4.5版本更新升级,企业级的低代码开发平台

JNPF快速开发框架是一个可复用的设计构件&#xff0c;使用JNPF的编程人员可以在一个通用功能已经实现的基础上开始具体的系统开发&#xff1b; 简单来讲&#xff0c;软件开发框架可以理解为我们盖楼房时&#xff0c;用梁柱子承重墙做起来的钢筋混凝土结构框架。而实现的软件功…

R语言基于协方差的结构方程拟合的卡方检验

在评估结构方程模型的拟合&#xff0c;很常见的应用是研究χ2进行测试&#xff0c;因为在给定足够大的样本量的情况下&#xff0c;它几乎总会检测出模型与数据之间的统计上的显着差异。因为&#xff0c;我们的模型几乎总是数据的近似值。如果我们的模型的协方差矩阵实际上匹配抽…

【云计算与大数据技术】分布式数据库NoSQL中KV、列式、图、文档数据库的讲解(图文解释 超详细)

一、NoSQL数据库概述 NoSQL泛指非关系型数据库&#xff0c;相对于传统关系型数据库&#xff0c;NoSQL有着更复杂的分类&#xff0c;包括KV数据库&#xff0c;文档数据库&#xff0c;列式数据库以及图数据库等等&#xff0c;这些类型的数据库能够更好的适应复杂类型的海量数据存…