`
sunlujing
  • 浏览: 178042 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 实现bitMap 结构

阅读更多

编程珠玑中第一篇讲的就是使用bitmap来排序大文件里面的数据。下面给出一个简单的BitMap实现。

主要使用Byte数组。主要就是shiyong为操作来设置为1 的元素。

 

public class BitMap {
	
	private byte[] bitMap = null;
	
	public BitMap(int size){
		//初始化时需要计算一共要使用多少个Byte。
                if(size%8==0){
			bitMap = new byte[size/8];
		}else{
			bitMap = new byte[size/8+1];
		}
	}
	public static void main(String[] args)
	     {
	        BitMap map = new BitMap(10);
	        map.setTag(1);
	        map.setTag(5);
	        map.setTag(4);
	        map.setTag(2);
	        map.setTag(11);
	        map.printBitMap();
	     }
	 
         //把一个数位设置为1
	 public void setTag(int number){
		 int index =0;
		 int bit_index = 0;
		 if(number%8 ==0){
			 index = number/8-1;
			 bit_index = 8;
		 }else{
			 index = number/8;
			 bit_index = number%8;
		 }
		 switch(bit_index){
		 	case 1:
		 		bitMap[index] =(byte) (bitMap[index]|0x01);
		 		break;
		 	case 2:
		 		bitMap[index] =(byte) (bitMap[index]|0x02);
		 		break;
		 	case 3:
		 		bitMap[index] =(byte) (bitMap[index]|0x04);
		 		break;
		 	case 4:
		 		bitMap[index] =(byte) (bitMap[index]|0x08);
		 		break;
		 	case 5:
		 		bitMap[index] =(byte) (bitMap[index]|0x10);
		 		break;
		 	case 6:
		 		bitMap[index] =(byte) (bitMap[index]|0x20);
		 		break;
		 	case 7:
		 		bitMap[index] =(byte) (bitMap[index]|0x40);
		 		break;
		 	case 8:
		 		bitMap[index] =(byte) (bitMap[index]|0x8);
		 		break;
		 }
		 
	 }
	 
       //打印bit为1 的数值
	public void printBitMap(){
		int size = bitMap.length;
		for(int i = 0;i < size ;i++){
			byte temp = bitMap[i];
			
			if((bitMap[i]&0x01)==1){
				System.out.print(i*8+1+" ");
			}
			if((bitMap[i]>>1&0x01)==1){
				System.out.print(i*8+2+" ");
			}
			if((bitMap[i]>>2&0x01)==1){
				System.out.print(i*8+3+" ");
			}
			if((bitMap[i]>>3&0x01)==1){
				System.out.print(i*8+4+" ");
			}
			
			if((bitMap[i]>>4&0x01)==1){
				System.out.print(i*8+5+" ");
			}
			if((bitMap[i]>>5&0x01)==1){
				System.out.print(i*8+6+" ");
			}
			if((bitMap[i]>>6&0x01)==1){
				System.out.print(i*8+7+" ");
			}
			if((bitMap[i]>>7&0x01)==1){
				System.out.print(i*8+8+" ");
			}
		}
		System.out.println();
	}
	 
}
 
0
2
分享到:
评论

相关推荐

    基于Java实现的火车票抢票并发数据结构处理.zip

    购票时系统在阈值次数内采用随机分配的方式产生车票,并对该车票进行检查,即查询 该车票是否可购买,如果可购买,则对该座位进行加锁(lock),之后再重复一次检查,若依 旧可购买,则对该 Seat 上的 bitmap 进行...

    使用纯Java语言写出来的数据结构

    使用纯Java语言写出来的数据结构,包含数据结构有 单向链表,双向链表,单向循环链表,双向循环链表,二叉树,队列,栈等, 关于实现的种类有分多种类型,包含有链表或者数组,二叉树里面包含有常见的二叉查找树,...

    c# 实现位图算法(BitMap)

    BitMap可以看成一种数据结构。 假设有这样一个需求:在20亿个随机整数中找出某个数m是否存在其中,并假设32位操作系统,4G内存。 在Java中,int占4字节,1字节=8位(1 byte = 8 bit)。 如果每个数字用int存储,那...

    数据结构与算法.xmind

    Java中的Deque接口 顺序表 链表 单链表 链表是离散存储线性结构 优点 空间没有限制 插入删除元素很快 缺点 存取速度很慢 链表分类 单向链表 一个节点指向下一个节点...

    roaringbitmap:Cython中咆哮的位图

    此实现基于和上的Java和C实现。 此实现的其他功能: 倒排列表表示:大部分已满的块都紧凑地存储为非成员数组(而不是成员数组或固定大小的位图)。 不变的咆哮位图的集合可以通过mmap有效地序列化到单个文件中。...

    Android开发应用实战详解源代码

    4.19 bitmap和matrix图片旋转 4.20 加载手机存储卡中的文件 4.21 小结 第5章 交互式服务 5.1 textview的花样 5.2 拨打电话程序 5.3 短信发送程序 5.4 e-mail发送程序 5.5 实现手机震动效果 5.6 图文提醒效果 5.7 ...

    FastBitSet.js:针对现代浏览器和JavaScript引擎的速度优化的BitSet实现

    当存储的值是相当小的整数时,BitSet(也称为Bitmap或位向量)是实现一组的理想数据结构。 它可能比通用集实现快几个数量级。 特别是,BitSet具有对设置操作(联合,差,交)的快速支持。 FastBitSet.js实现为速度...

    blog:算法,WebRTC,节点,微服务,Golang,ELK,Kubernetes,Istio,JAVA,PHP,MongoDB,Ningx,OpenResty,GraphQL ..

    Go 开源项目 MIMIO 的对象存储方案在探探的实践分布式分布式事务etcd 的实现原理数据结构与算法基础Dijkstra什么是 Bitmap 算法?Bitmap算法(进阶篇)最小栈的实现判断 2 的乘方找出缺失的整数辗转相除法是什么鬼?...

    infobright包

    虽然说 Infobright 没有提供索引结构,但它 Knowledge Grid 中的 Numerical Histogram、Character Map 和 Pack-to-Pack 结构,怎么看都和 bitmap 索引脱不了关系。只是它的组织形式不像传统数据库中的索引罢了。 ...

    深入理解Activity之间的数据传递

    那么对于用户自己定义的数据结构是无法直接用Intent来传送的,如果想要通过Intent来传递自定义数据,可以让数据结构实现Parcelable接口,这样就可以把数据放入Intent。但是Intent的传送效率也不是很高,特别是当传递...

    PContour:用于在二进制图像中查找轮廓的ProcessingJava库

    和Abe,K.,按边界跟随数字化二进制图像的拓扑结构分析[ ] David Douglas和Thomas Peucker,减少代表数字化线或其漫画所需的点数的算法[ ] 该库最初旨在与Processing一起使用,但也应适用于Java,因为它不依赖于...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    1.3.3 在Linux平台上下载并安装Java开发工具包(JDK) 21 1.3.4 在Linux平台上下载并安装Apache ANT 22 1.3.5 在Linux平台上下载并安装GNU Make 22 1.3.6 在Linux平台上下载并安装Android SDK 23 1.3.7 在Linux...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 ...• SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...

    Android典型技术模块开发详解

    2.2.1 程序结构 2.2.2 代码分析 2.3 权限permission 2.4 LogCat日志调试 2.5 示例练习 2.5.1 登录界面 2.5.2 事件处理 2.6 本章小结 第二篇 Android开发关键组件 第3章 Activity(活动) 3.1 什么是任务 3.2 ...

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    • SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和静态图像格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) • GSM GSM GSM GSM 电话技术 (依赖于硬件) • ...

    live-view-poc

    安卓该目录包含Java(Android Studio Project)中客户端POC的实现。 组件 客户端 Android应用程序从服务器请求图像,并在图像视图中显示结果。 使用BitmapFactory.Options.inBitmap实现可重用的Bitmap对象,以解决GC...

    2019年 Redis从入门到高可用 分布式实战教程

    4-5 bitmap.mp4 4-4 发布订阅.mp4 4-3 pipeline.mp4 4-2 慢查询.mp4 4-1 课程目录.mp4 3-4 Go客户端:redigo简介.mp4 3-3 Python客户端:redis-py.mp4 3-2 Java客户端:Jedis.mp4 3-1 课程目录.mp4 2-9 ...

    疯狂Android讲义.part2

    1.5 Android应用结构分析 24 1.5.1 创建一个Android应用 24 1.5.2 自动生成的R.java 26 1.5.3 res目录说明 27 1.5.4 Android应用的清单文件: AndroidManifest.xml 28 1.5.5 应用程序权限说明 29 1.6 Android应用的...

    疯狂Android讲义.part1

    1.5 Android应用结构分析 24 1.5.1 创建一个Android应用 24 1.5.2 自动生成的R.java 26 1.5.3 res目录说明 27 1.5.4 Android应用的清单文件: AndroidManifest.xml 28 1.5.5 应用程序权限说明 29 1.6 Android应用的...

    C#利用ZXing.Net生成条形码和二维码

    ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。而ZXing.Net是ZXing的端口之一。 在工程中引用ZXing.Net 在项目中,点击项目名称右键–&gt;管理NuGet程序包,打开...

Global site tag (gtag.js) - Google Analytics