转 java实现位图索引

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

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

 

Java代码   收藏代码
  1. public class BitMap {  
  2.       
  3.     private byte[] bitMap = null;  
  4.       
  5.     public BitMap(int size){  
  6.         "background-color: #ff6600;">//初始化时需要计算一共要使用多少个Byte。  
  7.                 if(size%8==0){  
  8.             bitMap = new byte[size/8];  
  9.         }else{  
  10.             bitMap = new byte[size/8+1];  
  11.         }  
  12.     }  
  13.     public static void main(String[] args)  
  14.          {  
  15.             BitMap map = new BitMap(10);  
  16.             map.setTag(1);  
  17.             map.setTag(5);  
  18.             map.setTag(4);  
  19.             map.setTag(2);  
  20.             map.setTag(11);  
  21.             map.printBitMap();  
  22.          }  
  23.        
Java代码   收藏代码
  1.         //把一个数位设置为1  
  2.  public void setTag(int number){  
  3.      int index =0;  
  4.      int bit_index = 0;  
  5.      if(number%8 ==0){  
  6.          index = number/8-1;  
  7.          bit_index = 8;  
  8.      }else{  
  9.          index = number/8;  
  10.          bit_index = number%8;  
  11.      }  
  12.      switch(bit_index){  
  13.         case 1:  
  14.             bitMap[index] =(byte) (bitMap[index]|0x01);  
  15.             break;  
  16.         case 2:  
  17.             bitMap[index] =(byte) (bitMap[index]|0x02);  
  18.             break;  
  19.         case 3:  
  20.             bitMap[index] =(byte) (bitMap[index]|0x04);  
  21.             break;  
  22.         case 4:  
  23.             bitMap[index] =(byte) (bitMap[index]|0x08);  
  24.             break;  
  25.         case 5:  
  26.             bitMap[index] =(byte) (bitMap[index]|0x10);  
  27.             break;  
  28.         case 6:  
  29.             bitMap[index] =(byte) (bitMap[index]|0x20);  
  30.             break;  
  31.         case 7:  
  32.             bitMap[index] =(byte) (bitMap[index]|0x40);  
  33.             break;  
  34.         case 8:  
  35.             bitMap[index] =(byte) (bitMap[index]|0x8);  
  36.             break;  
  37.      }  
  38.        
  39.  }  
  40.    
Java代码   收藏代码
  1.        //打印bit为1 的数值  
  2.     public void printBitMap(){  
  3.         int size = bitMap.length;  
  4.         for(int i = 0;i < size ;i++){  
  5.             byte temp = bitMap[i];  
  6.               
  7.             if((bitMap[i]&0x01)==1){  
  8.                 System.out.print(i*8+1+" ");  
  9.             }  
  10.             if((bitMap[i]>>1&0x01)==1){  
  11.                 System.out.print(i*8+2+" ");  
  12.             }  
  13.             if((bitMap[i]>>2&0x01)==1){  
  14.                 System.out.print(i*8+3+" ");  
  15.             }  
  16.             if((bitMap[i]>>3&0x01)==1){  
  17.                 System.out.print(i*8+4+" ");  
  18.             }  
  19.               
  20.             if((bitMap[i]>>4&0x01)==1){  
  21.                 System.out.print(i*8+5+" ");  
  22.             }  
  23.             if((bitMap[i]>>5&0x01)==1){  
  24.                 System.out.print(i*8+6+" ");  
  25.             }  
  26.             if((bitMap[i]>>6&0x01)==1){  
  27.                 System.out.print(i*8+7+" ");  
  28.             }  
  29.             if((bitMap[i]>>7&0x01)==1){  
  30.                 System.out.print(i*8+8+" ");  
  31.             }  
  32.         }  
  33.         System.out.println();  
  34.     }  
  35.        
  36. }  

你可能感兴趣的:(转 java实现位图索引)