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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值