如何实现位向量(bitset)(在Java中)?

Phi*_*hil 5 algorithm vector bit bitset

是否有一些好的文本,书籍,PDF或网站解释如何实现位向量,尤其是在Java中?

我问这个问题是因为我想在Java中创建自己的BitSet实现.原因是我想添加aditional功能和调整,如果我从java.util修改BitSet Java类,则无法完成.此外,我想制作自己的实现,以便我可以在我的开源项目中使用它,而无需处理许可证.

谢谢!

jef*_*rey 5

如果你想要你的位向量或位集的花哨的性能或其他花哨的功能,那么正如一些人已经建议的那样,你应该继承现有的位向量/集的实现.或者,您可以参考一些开源实现.但是,如果你想学习位向量的机制,那就相当简单了.这是一个实现示例:

class BitSet{
    private Byte[] p;

    private BitSet(){
        p = null;
    }

    public BitSet(int n){
        assert n > 0;
        p = new Byte[(n - 1) >> 3 + 1];
    }

    public BitSet Complement(){
        BitSet bs = new BitSet();
        bs.p = new Byte[p.length];
        for(int i = 0; i < p.length; i++){
            bs.p[i] = ~ p[i];
        }
        return bs;
    }

    public BitSet Union(BitSet bs2){
        assert p.length == bs2.p.length;
        BitSet bs = new BitSet();
        bs.p = new Byte[p.length];
        for(int i = 0; i < p.length; i++){
            bs.p[i] = p[i] | bs2.p[i];
        }
        return bs;
    }

    public BitSet Intersection(BitSet bs2){
        assert p.length == bs2.p.length;
        BitSet bs = new BitSet();
        bs.p = new Byte[p.length];
        for(int i = 0; i < p.length; i++){
            bs.p[i] = p[i] & bs2.p[i];
        }
        return bs;
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在上面的示例中实现并添加自己的设置操作功能.