什么是BitSet的list.size()等价物?

时间:2014-03-11 01:51:39

标签: java bitset

下面的代码可以更好地理解我的问题。我需要知道我的最后一点是如何设定的。如何在bitset中找到它?

public class FreeMain {

    FreeMain ( ) {  }

    public static void takeBitSet(BitSet bitSet) {
        // I intend to read 30 positions from bit set since the for loop looped from 0 to 29.
        // Just like list.size() would have given me number of elements added to it
        // whats the "list.size()" equivalent for bitset ? 
    }

    public static void main(String[] args) throws IOException {
        BitSet bs = new BitSet();
        System.out.println(bs.length());

        for (int i = 0; i < 30; i++) {
            bs.set(i);
            System.out.print(bs.get(i));
        }

        takeBitSet(bs);
    }  
}

2 个答案:

答案 0 :(得分:3)

cardinality(),它返回设置的位数。

还有length(),它返回1 +最高位集的索引。

还有size(),它返回集合的容量。

这三个length() - 1中最接近“你设置的最后一位”,但请注意它是最高设置位的索引,而不是最近设置的索引< / em> bit(仅使用BitSet无法实现)。

您还提到了“添加到其中的元素数量”,其中cardinality()是最接近的匹配项(只要您不考虑将位设置为0以在语义上等效于“将0添加到”集合“)。

答案 1 :(得分:2)

我不太清楚答案是什么(Jason C很棒)。我把一个很小的测试集中在一起来感受它(Java 7,64位系统):

import java.util.BitSet;

public class BitSetTest {
    public static void main(String[] args) {
        BitSet bset = new BitSet();

        for (int i = 0; i < 65; i++) {
            bset.set(i);
        }

        bset.set(78);

        System.out.println("Cardinality = " + bset.cardinality());
        System.out.println("Size = " + bset.size());
        System.out.println("Length = " + bset.length());
    }
}

输出:

Cardinality = 66
Size = 128
Length = 79

在此设置中,您可以将大小视为该集可用的位数。 (当你超过初始大小时会增加)。基数是到目前为止已设置的实际元素数量。长度是设置的最高位,您可以看到它是79,并且可能设置或未设置之间的位(取决于之前使用的设置)。