java实现BitMap

发布时间:2022-06-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了java实现BitMap脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
public class BITMap {

    PRivate byte[] drums;

    public BitMap(){
        this(1024);
    }

    public BitMap(int size){
        if(size <= 0)
            throw new RuntimeException("BitMap长度应该大于0");
        // size &amp; 0x07 == size % 8          size >> 3 == size /= 8
        int drumSize = (size & 0x07) == 0 ? size >> 3: (size >> 3)+1;
        drums = new byte[drumSize];
    }

    public void add(int num){
        int position = findDrumPosition(num);
        drums[position] |= 1 << (num & 0x07);
    }

    public void remove(int num){
        int position = findDrumPosition(num);
        drums[position] &= ~(0 ^ 1 << (num & 0x07));
    }

    public boolean has(int num){
        int position = findDrumPosition(num);
        return ((drums[position] >> (num & 0x07)) & 0x01) == 1;
    }

    public void foreach(Consumer<Integer> exist, Consumer<Integer> noExist){
        if(noExist == null)
            noExist = e->{};
        if(exist == null)
            exist = e->{};
        for (int i = 0; i < drums.length<<3; i++) {
            if(!has(i))
                noExist.accept(i);
            else
                exist.accept(i);
        }
    }

    // 定位桶
    private int findDrumPosition(int num){
        if(num < 0 || num >= drums.length<<3)
            throw new RuntimeException("存入的数据应该大于等于0且小于BitMap的长度");
        return num >> 3;
    }
}

脚本宝典总结

以上是脚本宝典为你收集整理的java实现BitMap全部内容,希望文章能够帮你解决java实现BitMap所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。