BitMap

作者: IT入门指南 | 来源:发表于2020-02-07 17:29 被阅读0次

bitmap简述

bitMap这种数据结构在解决一些大数据问题时候,是比较有用的数据结构。可以明显减少内存的使用和查找数据的速度。 利用计算机的1个bit位来表示一个数。某一个bit位的值位1 表示该bit位表示的数字是存在的

例如  1个字节可以表示 8 个数字。

代码是最好的解释

以32位系统的 java 代码

package datastructself;

public class BitMap {

    // 32位表示的最大的整数先计算整数  536870912 = 2^32 /  8
    private byte[] bitArray = new byte[536870912];

    private int getIndex(int number) {
        int index;
        if (0 == number % 8) {
            index = number / 8 - 1;
        } else {
            index = number / 8;
        }
        return index;
    }

    private int getOffset(int number) {
        int offset;
        if (0 == number % 8) {
            offset = 7;
        } else {
            offset = number % 8 - 1;
        }
        return offset;
    }

    public void bitSet(int number) {
        int index = this.getIndex(number);
        int offset = this.getOffset(number);
        bitArray[index] = (byte) (bitArray[index] | 1 << offset);
    }

    public void bitClear(int number) {
        int index = this.getIndex(number);
        int offset = this.getOffset(number);
        bitArray[index] = (byte) (bitArray[index] & ~(1 << offset));
    }

    public boolean get(int number) {
        int index = this.getIndex(number);
        int offset = this.getOffset(number);
        return (byte) (bitArray[index] & (1 << offset)) != 0;
    }
}

测试代码

public class Driver {
    public static void main(String[] args) {
        BitMap bitMap = new BitMap();

        Integer a = 12345678;
        Integer b = 4567801;
        Integer c = 136;

        bitMap.bitSet(a);
        bitMap.bitSet(b);
        bitMap.bitSet(c);
        System.out.println(bitMap.get(125));
        System.out.println(bitMap.get(a));

    }
}

相关文章

网友评论

      本文标题:BitMap

      本文链接:https://www.haomeiwen.com/subject/qhqvxhtx.html