How to implement bit vector (bit) (in Java)?

Is there any good text, books, PDF, or a website that explains how to implement a bit vector, especially in Java?

I ask this question because I would like to make my own implementation of BitSet in Java. The reason is because I want to add additional functions and settings that cannot be performed if I modify the BitSet Java class from java.util. Moreover, I want to make my own implementation so that I can use it in my open source project without having to have a license.

Thank!

+5
source share
2 answers

, , , /. . , , . :

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;
    }
}

.

+5

. , .

    public class BitSet
    {
        int[] numbers;
        public BitSet(int k){
            numbers = new int[(k >> 5) + 1];
        }
        public void set(int k)
        {
            int remender = k & 0x1F;
            int devide = k >> 5;
            result[devide] = result[devide] | (1<<remender);
        }

        public void unset(int k)
        {
            int remender = k & 0x1F;
            int devide = k >> 5;
            result[devide] = result[devide] & (~(1<<remender));
        }

        public boolean isSet(int k)
        {
            int remender = k & 0x1F;
            int devide = k >> 5;
            return (result[devide] & (1<<remender))!=0;
        }
    }
+2

All Articles