如何简化BitSet [JAVA]

我使用BitSet表示可能要补课的时间,情况是,当您将角位设为假时,它们将被简化,这意味着它们不再存在于BitSet中.我如何要求BitSet不简化?

为了使我的解释更清楚,这是代码:

   for(Map.Entry<GrupAssig, BitSet> entry : bitsetPerGrup.entrySet()){

            BitSet bitset = entry.getValue();

            //n franges per dia
            int numFranges = UnitatDocent.getNumFranges();
            int indexDia = this.dia.id() * numFranges;

            bitset.clear(indexDia, indexDia+numFranges);
     }

想象一下,默认情况下该位集具有60位,并且numFranges = 12和this.dia.id()= 4.这将使最后十二位设置为0.我得到的结果是:

111111111111111111111111111111111111111111111111

但是如果this.dia.id()= 3我得到:

11111111111111111111111111111111111100000000000011111111111

您可以通过以下方式打印BitSet:

    public static void printBitset(BitSet b) {
        StringBuilder s = new StringBuilder();
        for( int i = 0; i < b.length();  i++ )
        {
            s.append( b.get( i ) == true ? 1 : 0 );
        }

        System.out.println( s );
    }

这证明了我在说什么.

谢谢.

解决方法:

这是BitSet.length的文档:

length()
Returns the "logical size" of this BitSet: the index of the highest set bit in the BitSet plus one.

如果您需要打印出一定数量的位(例如60),请在循环中使用常量而不是“ .length()”.您可以在任何索引上调用“ .get(index)”,而不管其长度如何,它将为您提供该位的结果.

例如,以下代码产生“ 0000011000”:

import java.util.BitSet;

public class Main {

    public static void main(String[] args) {
        BitSet bits = new BitSet();
        bits.set(5);
        bits.set(6);
        StringBuilder bitString = new StringBuilder();
        for (int i = 0; i < 10; i++) {
            bitString.append(bits.get(i) ? "1" : "0");
        }
        System.out.println(bitString.toString());
    }
}
上一篇:Java手动实现布隆过滤器(BitSet)


下一篇:C++ STL BitSet