下面的代码可以更好地理解我的问题。我需要知道我的最后一点是如何设定的。如何在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);
}
}
答案 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,并且可能设置或未设置之间的位(取决于之前使用的设置)。