如何让BitSet不被简化

我使用 BitSet 来表示可能填满讲座的时间,情况是当您将角落位设置为false 时,它们会被简化,这意味着它们不再在 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);

     }

想象一下,bitset 默认有 60 位,numFranges=12 和 this.dia.id()=4。这将使最后 12 位设置为 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 );

    }

这证明了我在说什么。


谢谢你。


白衣非少年
浏览 219回答 1
1回答

达令说

这是 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 {&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; BitSet bits = new BitSet();&nbsp; &nbsp; &nbsp; &nbsp; bits.set(5);&nbsp; &nbsp; &nbsp; &nbsp; bits.set(6);&nbsp; &nbsp; &nbsp; &nbsp; StringBuilder bitString = new StringBuilder();&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < 10; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bitString.append(bits.get(i) ? "1" : "0");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(bitString.toString());&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java