自学Java day53 使用jvav实现 BitMap 数据结构 从jvav到架构师
此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到架构师相关推荐
- 自学Java day53 使用jvav实现 并查集 数据结构 从jvav到架构师
并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中.其特点是看似并不复杂,但 ...
- 自学Java day53 使用jvav实现 字典树 数据结构 从jvav到架构师
字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公 ...
- 自学Java day41 图书管理系统-springboot快速开发 从jvav到架构师
前端:html + css + jvavscript + vue + ajax + axios + element ui 后端:jvav + springboot + mybatisplus + my ...
- Java码农怎样才能成为年薪60W的高级架构师进入BAT?
怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名遭到BAT疯抢的架构师. 那么遭到BAT疯抢的架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员也是工作三五年之 ...
- 想自学Java的速来!一文搞懂JVM架构和运行时数据区,满满干货指导
前言 Java是目前应用最为广泛的软件开发平台之一.随着Java以及Java社区平台的不断壮大,Java也早已不再是简简单单的一门计算机语言了,它更是一个平台.一种文化.一个社区. 作为一个平台,Ja ...
- 一份深入解析Java虚拟机HotSpot手册,让我卷成美团架构师
前言 Java语言已经走过了20多个年头,在此期间虽然新语言层出不穷,但是都没有撼动Java的位置.可能是历史选择了Java,也可能是Java改变了历史,总之,Java无疑是一门成功的编程语言.这门语 ...
- java 反射获取属性名和值_阿里P8架构师核心知识点整理:Java基础+spring原理+微服务+算法...
Java基础 5.1.1. JAVA 异常分类及处理 5.1.1.1. 概念 如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法.在这种情况下 会抛出一个封装了错误信息的对象.此时, ...
- Java这些高端技术只有你还不知道,移动架构师成长路线
并发编程共享模型篇 并发编程概览 进程与线程 Java线程 共享模型之管程 共享模型之内存 共享模型之无锁 共享模型之不可变 共享模型之工具 共享模型之管程 原理之 Monitor(锁) 原理之伪共享 ...
- 为什么 Java 在 25 年之后依旧如此年轻:一个架构师的看法
导读:下个月就要过26岁生日的Java,依然与开发者保持着紧密的联系:现在,全球开发者社区中仍有 69% 的人使用 Java 编写代码. Oracle 最近发布了 Java 15,其中包含了大量的特性 ...
最新文章
- python3.x下 smtp发送html邮件和附件
- epplus保存为流_c# – 另存为使用EPPlus?
- php 匹配正则,php正则匹配类
- c/c++整理--c++面向对象(4)
- 计算机语言wifi,Windows7WIFI热点设置器
- (转)互联网——降级论
- Linux搭建虚拟专用,Ubuntu的发行版如何搭建虚拟专用网
- Windows Server 2008 多元密码策略之ADSIEDIT篇
- GPU+Cuda8.0+cudnn8+OpenCv2.4.13+Caffee 安装教程嘎嘎
- 功能测试Ⅷ——业务流程测试
- LaTeX下载安装及Markdown转PDF方法
- 使用python破解zip、rar压缩包密码
- 六月福师计算机应用基础在线作业,19春福师《计算机应用基础》在线作业一答案满分...
- idea如何恢复默认的keymap
- man fgetc fgets getc getchar ungetc
- 燕过留声:由 Activity 和 Fragment 的通信方法想到的【WIP】
- Codeforces Gym 101173 K. Key Knocking (构造)
- 计算机重启遇到你的账户已被停用,win10系统提示administrator您的账户已被停用的解决方法...
- Swift - 设置UILabel、UITextView的文字行间距
- 【心情分享】联系博主