Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2877422
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: Java

2012-08-24 10:22:53



省内存,检索效率高,小了32倍
size=10000
int[size]
vs
byte[size/8]

         if(size%8==0){  
            bitMap = new byte[size/8];  
        }else{  
            bitMap = new byte[size/8+1];  

点击(此处)折叠或打开

  1. package bitmap;
  2. /** 
  3.  * 
  4.  * @version 创建时间:2012-8-24 上午08:33:13 
  5.  * 
  6.  */

  7. public class BitMap 
  8. {
  9.  
  10.  
  11.     public static void main(String[] args) throws InterruptedException {  
  12.         int m=0;
  13.         BitMap hm = new BitMap() ;  
  14.         hm.add(m);
  15.         hm.add(1) ;
  16.         hm.add(2);
  17.         hm.add(3);
  18.         hm.add(4);
  19.         hm.add(7);
  20.         System.out.println(hm.contains(7));  
  21.         hm.remove(4);
  22.         System.out.println(hm.contains(7));  
  23.     }  
  24.   
  25.     public BitMap() {  
  26.         bytes = new byte[12500000];  
  27.     }  
  28.   
  29.     public BitMap(int size) {  
  30.         bytes = new byte[size];  
  31.     }  
  32.   
  33.     private byte[] bytes = null;  
  34.   
  35.     public void add(int i) {  
  36.         int r = i / 8;  
  37.         int c = i % 8;  
  38.         bytes[r] = (byte) (bytes[r] | (1 << c));  
  39.     }  
  40.   
  41.     public boolean contains(int i) {  
  42.         int r = i / 8;  
  43.         int c = i % 8;  
  44.         if (((byte) ((bytes[r] >>> c)) & 1) == 1) {  
  45.             return true;  
  46.         }  
  47.         return false;  
  48.     }  
  49.   
  50.     public void remove(int i) {  
  51.         int r = i / 8;  
  52.         int c = i % 8;  
  53.         byte x=(byte)((1<
  54.         bytes[r]=(byte)(bytes[r] & x);
  55.     }  
  56.   
  57. }
>> 右移。 符号位是0补0,是1补1。 
>>>无符号右移。补0。 
阅读(1123) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~