位集合的大小不一致

时间:2019-01-29 02:59:02

标签: java random bitset

所以我要初始化一个长度为4的Bitset变量。当我尝试使用Random的class nextBoolean方法将该Bitset设置为种子时。它给删除元素的效果。这很可能是我对使用Bitset的经验不足。但是据我了解,Bitset变量中的每个元素都应具有随机的0或1。有人可以看出我做错了什么吗,并解释这是什么吗?

public void seedCandidate()
{
    // Randomly sets bits in the candidate

    for (int i = 0; i < numVals; i++)
        truthVals.set(i, rn.nextBoolean());

}

当我输出位集的长度时,它给出了随机大小。 trueVals(Bitset变量)的长度应为4,这是它实例化后的长度,因此应为{0,1,2,3}。但是从上面的方法播种后,我得到了这些不同的长度。来自不同的Bitset变量。

{1,2,3},{0,1,2,3},{0},{0,2,3}

2 个答案:

答案 0 :(得分:2)

来自BitSet-javadoc

  1. public BitSet(int nbits)

      

    创建一个位集合,其初始大小足够大以显式表示索引范围在0到nbits-1之间的位。 所有位最初都是假的

  2. public int length()

      

    返回此BitSet的“逻辑大小”: BitSet中最高设置位的索引加一个。如果BitSet不包含任何设置位,则返回零。

  3. public int size()

      

    返回此BitSet实际使用的位数位数,以表示位数。

  4. public int cardinality()

      

    返回此BitSet中设置为true的位数

  5. public void set(int bitIndex, boolean value)

      

    将指定索引处的位设置为指定值。

  6. 当然还有提到的public String toString() ...

那么什么是困惑/意外?

答案 1 :(得分:0)

请考虑将一个布尔数组置位。 (实现的过程当然是一长串的位。)

  • set(7, true)将“如果尚未添加7,则添加到集合中。”
  • set(7, false)将“从集合中删除7(如果已存在)。”

不幸命名的方法可能会引起混乱:

  • int cardinality()真实元素的数量
  • int size()的容量(保留位,“数组大小”)