`
sunlujing
  • 浏览: 180086 次
  • 性别: 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
分享到:
评论

相关推荐

    RoaringBitmap, 在Java中,一个更好的压缩 bitset.zip

    RoaringBitmap, 在Java中,一个更好的压缩 bitset RoaringBitmap Bitsets,也称为位图,通常用作快速数据结构。 不幸的是,他们可以使用太多的内存。 为了补偿,我们经常使用压缩位图。咆哮位图是压缩位图,它比传统...

    Java Windows Bitmap decoder and encoder

    Java Windows Bitmap(BMP)编码器与解码器是一个用于处理图像文件的工具,它允许在Java环境中读取和创建Windows BMP格式的图像。BMP是一种无损的图像存储格式,广泛应用于各种操作系统中,尤其是Windows系统。由于...

    java 实现 bmp 转 jpg

    以上就是一个简单的BMP转JPEG的Java实现。然而,实际操作中可能还需要处理不同色彩模式、分辨率等复杂情况。例如,BMP可以是24位色、8位灰度或索引彩色,而JPEG通常只支持YCbCr色彩空间。因此,转换时可能需要将BMP...

    java实现的8583发包解包

    Java实现的8583发包解包是一个在金融领域常见的技术操作,主要用于与银行系统进行数据交互。8583标准是国际银行卡信息交换报文格式,全称为ISO 8583,用于电子支付系统中不同金融机构之间的数据传输。这个标准定义了...

    如何基于Java实现数据结构链表相关程序.pdf

    综上所述,文档中提到的Java实现链表的程序和处理BMP图像文件的代码片段,为我们提供了如何在不使用指针的高级语言中操作链表,以及如何在编程中处理图像文件的宝贵经验。通过这些内容的掌握,可以帮助我们更好地...

    8583协议java实现

    Java实现8583协议的关键在于理解并解析其消息格式。8583报文由多个字段组成,每个字段都有特定的位宽和含义。其中,字段0是消息类型标识,字段11和12是发送者和接收者的系统标识,字段24是MAC(Message ...

    Springboot如何使用Redis bitmap实现签到功能含完整代码(值得珍藏)

    ### Spring Boot 如何使用 Redis Bitmap 实现签到功能 #### 一、前言 随着互联网技术的发展,大量的在线服务需要处理海量数据。特别是在社交媒体、在线教育等领域,如何高效地管理和统计用户的行为数据变得尤为重要...

    算法java实现

    在这个“算法java实现”的主题中,我们将深入探讨如何使用Java语言来实现各种重要的算法。Java是一种面向对象的编程语言,以其跨平台性和强大的库支持而受到广大程序员的喜爱,尤其适合用于算法的实现。 1. **动态...

    RoaringBitmap:Java中更好的压缩位集

    咆哮位图 位集(也称为位图)通常用作快速数据结构。 不幸的是,它们会占用过多的内存。 为了补偿,我们经常使用压缩的位图。 咆哮的位图是压缩的位图,其性能通常优于传统的压缩位图,例如WAH,EWAH或Concise。 在...

    android 把一个view视图转换成bitmap 保存到本地

    `View`还可以包含其他`View`,形成复杂的布局结构。 要将一个`View`转换为`Bitmap`,我们需要执行以下几个步骤: 1. **创建Bitmap对象**:`Bitmap.createBitmap()`方法用于创建一个新的Bitmap,参数分别是宽度、...

    Java实现二维码.zip

    在本资源"Java实现二维码.zip"中,主要探讨了如何使用Java编程语言生成二维码图片。二维码作为一种高效的信息编码方式,广泛应用于数据交换、链接跳转等领域。以下将详细阐述涉及的关键知识点。 首先,我们来看Java...

    Bitmap位图缩放范例

    在Android中,Bitmap的缩放主要通过以下几种方式实现: 1. **使用Bitmap.createScaledBitmap()方法**:这是最直接的缩放方式。该方法接受源Bitmap、目标宽度和目标高度作为参数,根据指定的比例进行缩放。例如: ``...

    《编程珠玑》部分源代码Java实现

    Java实现的源代码是作者思想的一种具象化,使读者能够更直观地理解和学习书中的编程技巧。 在提供的压缩包中,我们看到包含了一个名为"src"的文件夹,这通常代表源代码目录。尽管具体源代码没有详细列出,但我们...

    二维码BitMap图片解析

    Bitmap是Android系统中用于表示图像的一种数据结构。在Android开发中,Bitmap对象主要用于存储和处理图像数据。它提供了一系列方法来操作图像,如压缩、旋转、裁剪等。 #### 三、二维码解析原理 二维码的解析过程...

    通过将资源库图片转化为Bitmap,使用Zxing库完成多二维码识别

    在Android中,Bitmap是用于表示图像的一种内存高效的数据结构。你可以通过以下代码将图片资源转换为Bitmap: ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image); ``` ...

    android 获取界面部分view,view截图,生成bitmap图片

    以上就是实现“android 获取界面部分view,view截图,生成bitmap图片”的核心步骤和涉及的技术点。在实际开发中,可能还需要考虑性能优化,比如避免在主线程进行耗时操作,或者在内存有限的情况下使用更高效的位图...

    redis 的bitmap点赞功能的应用源码.zip

    Redis中的Bitmap是一个非常高效的数据结构,它用于存储和操作位序列。在社交网络或内容分享平台上,点赞功能是非常常见的,用户可以对喜欢的内容进行点赞,系统需要记录这些点赞行为。在大数据量的情况下,传统的...

    高级数据结构及应用之使用bitmap进行字符串去重的方法实例

    在实现字符串去重时,我们可以使用int或char作为Bitmap的底层数据结构。如果使用int作为底层数据结构,则需要int数组的长度为122/32+1⇒41。如果使用char作为底层数据结构,则需要char数组的长度为122/8+1⇒16。 ...

    RoaringBitmap.zip

    RoaringBitmap是一个在Java中广泛使用的高效位图数据结构,尤其适用于大数据和搜索引擎等领域。它在处理大规模数据集时能够提供显著的性能优势,比传统的布隆过滤器(Bloom Filter)和Java内置的BitSet类更为高效。...

    Java手机画册 Java程序

    通过研究这个示例代码,我们可以学习到具体的实现细节,包括如何组织项目结构、如何处理图像、如何创建滑动效果以及如何与用户交互等。对于初学者来说,这是一个很好的学习资源,对于有经验的开发者来说,它可以作为...

Global site tag (gtag.js) - Google Analytics