位图bitMap理解

本文是个人基于位图的理解,注释了他人代码,解释了代码的作用。

本文起到说明效果,为刚接触位图的人看,如果问题请留言指正。

package zljTest.test;
public class BitMap {

    public static void main(String[] args) {
        BitMap bm = new BitMap();
        bm.setBit(15);
        bm.setBit(5);
        bm.setBit(14);
        bm.setBit(8);
       System.out.println(checkBit(5));
       sortBitArray();
    }
    //位图存储的最大数字
    private static int N = 16;
    //一个int占用4byte=32bit,因此位图中一个元素表示32个数
    private static int map[] = new int[N/32+1];
    //封装几个方法方便调用
    private static boolean checkBit(int val){
        return checkBit(map,val);
    }
    private static void setBit(int val){
        setBit(map,val);
    }
    private static void sortBitArray(){
        sortBitArray(map);
    }
    //判断当前值是否存在
    // & 位与 当前面二进制 与后面二进制中相同位置都是1则1 否则0
    //比如5 判断100000(1<<5) 如果第六位都是1则证明5已经存放
    private static boolean checkBit(int[] arr,int val){
        return (arr[val/32] & (1<<val%32))!=0;
    }
    //放入位图方便实用 |= 位或等
    //比如5 放入第一个对象 第六个0变为1(第一个是0的) 1<<5 = 32 二进制 100000
    private static void setBit(int[] arr,int val){
        arr[val/32] |= 1<<val%32;
    }
    //如果需要查看所有则需要循环最大值加一次的次数,判断位图中每个值是否都存在
    public static void sortBitArray(int[] bitArray) {
        int count = 0;
        for (int i = 0; i <= N; i++) {
            if (checkBit(bitArray, i)) {
                System.out.print(count + "\t");
            }
            count++;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值