此BitMap不是指图片存储格式里的位图。

Bit即比特,是目前计算机系统里边数据的最小单位,8个bit即为一个Byte。一个bit的值,或者是0,或者是1;也就是说一个bit能存储的最多信息是2。

BitMap可以理解为通过一个bit数组来存储特定数据的一种数据结构;由于bit是数据的最小单位,所以这种数据结构往往是非常节省存储空间。

//可用于布隆过滤器
//样本量 n 失误率p 哈希函数 k
//m = -(n * lnp) / (ln2)^2
//k = ln2 * m/n ≈ 0.7 * m/n (向上取整)
public class BitMap {public int[] bitmap;//[0] 31 ~ 00//[1] 63 ~ 32//[2] 95 ~ 64//a % b = a & (b-1)(b=2^n)//即:a % (2^ n) = a & (2^n-1)public BitMap(int length) {//int = 32this.bitmap = new int[length];}@Overridepublic String toString() {return "BitMap{" +"bitmap=" + Arrays.toString(bitmap) +'}';}//取得BitMap第n位int get(int n) {/*int a = num / 32;//n >> 5;int b = num % 32;//n & 31;int c = (bitmap[a] >> b) & 1;*/return (bitmap[n >> 5] >> (n & 31)) & 1;}//将BitMap第n位设置为0void set0(int n) {/*int a = n / 32;//n >> 5;int b = n % 32;//n & 31;bitmap[a] &= ~(1 << b);*/bitmap[n >> 5] &= ~(1 << (n & 31));}//将BitMap第n位设置为1void set1(int n) {/*int a = n / 32;//n >> 5;int b = n % 32;//n & 31;bitmap[a] |= (1 << b);*/bitmap[n >> 5] |= (1 << (n & 31));}//将BitMap第n位取反void setN(int n) {/*int a = n / 32;//n >> 5;int b = n % 32;//n & 31;bitmap[a] ^= (1 << b);*/bitmap[n >> 5] ^= (1 << (n & 31));}}

BitMap相关说明 

使用int[]结构表示BitMap

//bitmap[0] 表示 31 ~ 00 位
    //bitmap[1] 表示 63 ~ 32 位
    //bitmap[2] 表示 95 ~ 64 位

即数组增序排列,单个int降序排列

使用位运算加快运算

num / 32    等效于  n >> 5
        num % 32  等效于  n & 31

位运算比加减快,加减比乘除快

因此采用速度更快的  n >> 5 , n & 31

世界线回溯,从jvav到架构师

自学Java day53 使用jvav实现 BitMap 数据结构 从jvav到架构师相关推荐

  1. 自学Java day53 使用jvav实现 并查集 数据结构 从jvav到架构师

    并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中.其特点是看似并不复杂,但 ...

  2. 自学Java day53 使用jvav实现 字典树 数据结构 从jvav到架构师

    字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公 ...

  3. 自学Java day41 图书管理系统-springboot快速开发 从jvav到架构师

    前端:html + css + jvavscript + vue + ajax + axios + element ui 后端:jvav + springboot + mybatisplus + my ...

  4. Java码农怎样才能成为年薪60W的高级架构师进入BAT?

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名遭到BAT疯抢的架构师. 那么遭到BAT疯抢的架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员也是工作三五年之 ...

  5. 想自学Java的速来!一文搞懂JVM架构和运行时数据区,满满干货指导

    前言 Java是目前应用最为广泛的软件开发平台之一.随着Java以及Java社区平台的不断壮大,Java也早已不再是简简单单的一门计算机语言了,它更是一个平台.一种文化.一个社区. 作为一个平台,Ja ...

  6. 一份深入解析Java虚拟机HotSpot手册,让我卷成美团架构师

    前言 Java语言已经走过了20多个年头,在此期间虽然新语言层出不穷,但是都没有撼动Java的位置.可能是历史选择了Java,也可能是Java改变了历史,总之,Java无疑是一门成功的编程语言.这门语 ...

  7. java 反射获取属性名和值_阿里P8架构师核心知识点整理:Java基础+spring原理+微服务+算法...

    Java基础 5.1.1. JAVA 异常分类及处理 5.1.1.1. 概念 如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法.在这种情况下 会抛出一个封装了错误信息的对象.此时, ...

  8. Java这些高端技术只有你还不知道,移动架构师成长路线

    并发编程共享模型篇 并发编程概览 进程与线程 Java线程 共享模型之管程 共享模型之内存 共享模型之无锁 共享模型之不可变 共享模型之工具 共享模型之管程 原理之 Monitor(锁) 原理之伪共享 ...

  9. 为什么 Java 在 25 年之后依旧如此年轻:一个架构师的看法

    导读:下个月就要过26岁生日的Java,依然与开发者保持着紧密的联系:现在,全球开发者社区中仍有 69% 的人使用 Java 编写代码. Oracle 最近发布了 Java 15,其中包含了大量的特性 ...

最新文章

  1. python3.x下 smtp发送html邮件和附件
  2. epplus保存为流_c# – 另存为使用EPPlus?
  3. php 匹配正则,php正则匹配类
  4. c/c++整理--c++面向对象(4)
  5. 计算机语言wifi,Windows7WIFI热点设置器
  6. (转)互联网——降级论
  7. Linux搭建虚拟专用,Ubuntu的发行版如何搭建虚拟专用网
  8. Windows Server 2008 多元密码策略之ADSIEDIT篇
  9. GPU+Cuda8.0+cudnn8+OpenCv2.4.13+Caffee 安装教程嘎嘎
  10. 功能测试Ⅷ——业务流程测试
  11. LaTeX下载安装及Markdown转PDF方法
  12. 使用python破解zip、rar压缩包密码
  13. 六月福师计算机应用基础在线作业,19春福师《计算机应用基础》在线作业一答案满分...
  14. idea如何恢复默认的keymap
  15. man fgetc fgets getc getchar ungetc
  16. 燕过留声:由 Activity 和 Fragment 的通信方法想到的【WIP】
  17. Codeforces Gym 101173 K. Key Knocking (构造)
  18. 计算机重启遇到你的账户已被停用,win10系统提示administrator您的账户已被停用的解决方法...
  19. Swift - 设置UILabel、UITextView的文字行间距
  20. 【心情分享】联系博主

热门文章

  1. 驱动程序开发:SPI设备驱动
  2. 应用MATLAB求解线性代数题目(一)——行列式
  3. 壁纸不够用?教你爬空优美图库的动漫壁纸
  4. 涉密计算机及涉密网络使用自查,网络安全自查报告(2)
  5. LVS+Keepalived实现高可用的ip负载均衡
  6. 嵌入式培训经验分享——C++入门基础知识
  7. 冰河又被腾讯推荐是一种怎样的体验?
  8. 数据分析方法--回归分析方法((SPSS建模:多元线性回归案例)
  9. 禁用迅雷的浏览器支持
  10. java项目第17期-小程序团购+商城源码【毕业设计】