快速列出Java BigInteger的1的选项有哪些?我们可以假设BigInteger是正数,但是它可能是一个相当大的Java BigInteger,带有多余的1。不过,我们希望很快找到它们。我想要一个Java BigInteger的1的位位置的枚举器或迭代器。
最佳答案
一个人可以使用getLowestSetBit()
,但是测试表明,以下内容的速度大约是3-4倍:
public static final void printOneIndexes(BigInteger n)
{
for (int i = 0; i < n.bitLength(); i++)
{
if (n.testBit(i))
System.out.printf(" %d", i);
}
}
当然,如果删除打印并将结果存储在列表中,则打印速度可能会更快。
我使用BigInteger对其进行了测试,并仅设置了以下几位:
public static BigInteger makeSparseInt()
{
BigInteger b = BigInteger.ZERO.setBit(1000000);
Random r = new Random();
for (int i = 0; i < 100; i++)
{
b = b.setBit(r.nextInt(1000000));
}
return b;
}