此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. CentOS6.5-源码编译安装最新MySQL5.7.10
  2. linux命令——pwd
  3. 一蹴而就的解释是什么_健身会让我们成为什么样的人?
  4. php mysql导出csv文件_详解PHP导入导出CSV文件
  5. 台式电脑如何截屏_买台式电脑如何避免成为被宰羔羊(一)
  6. Caffarelli 关于自由边界正则性的论文C1
  7. VC编译选项 /EHa 异常处理
  8. 微软7月修复117个漏洞,其中9个为0day,2个是Pwn2Own 漏洞
  9. 第一章 安装和使用SQL Server 2008 R2
  10. IDEA SpringBoot多模块项目搭建详细过程(转)
  11. SVNServer中的权限问题
  12. 发布谷歌离线地图瓦片
  13. DVWA-Writeup
  14. Quick BI企业报表制作——个人笔记
  15. 串口转 HID 键盘鼠标芯片 CH9329
  16. 6款程序员必备的免费在线画图工具,贼好用!
  17. 网络直播电视之M3U8解析篇 (下)
  18. 7大子论坛回顾 | PGConf.Asia亚洲技术大会DAY2精彩继续
  19. VUE开发环境下mock模拟数据与后端接口对接示例
  20. java聊天室测试_Java网络聊天室实训能力测试

热门文章

  1. 商场计算机管理系统,【商场超市管理系统】免费在线试用_软件库_选软件网
  2. OFCMS 发布1.1.2 java cms ofcms
  3. 锘崴科技入选中国移动海南公司2022年ICT业务合作伙伴名单
  4. 主机开启双网卡不能上网的一个解决办法
  5. Mysql数据库存储过程基本语法讲解
  6. css 滚动条不占宽度
  7. 用java编写人机围棋游戏_JAVA写的围棋游戏的源代码.doc
  8. 王道论坛机试指南学习笔记(一)经典入门
  9. linux查看端口号使用情况
  10. python+django大学生心理健康测试咨询网站