Adding cardinality() to BitSet.

This commit is contained in:
Mike Keesey 2012-06-29 10:21:01 -06:00
parent 3c2adb86f5
commit 31311160c3
2 changed files with 16 additions and 0 deletions

View File

@ -182,4 +182,12 @@ public class BitSet implements Serializable, Cloneable {
return nextBit(fromIndex, true);
}
public int cardinality() {
int numSetBits = 0;
for (int i = nextSetBit(0); i >= 0; i = nextSetBit(i+1)) {
++numSetBits;
}
return numSetBits;
}
}

View File

@ -14,16 +14,19 @@ public class BitsetTest {
assertTrue("bit 5 is set", bits.get(5));
assertTrue("bit 0 is not set", !bits.get(0));
assertTrue("bit 16 is not set", !bits.get(16));
assertCardinality(bits, 2);
bits.and(other);
assertTrue("bit 5 is set", bits.get(5));
assertTrue("bit 1 is not set", !bits.get(1));
assertCardinality(bits, 1);
bits.set(100);
assertTrue("bit 100 is set", bits.get(100));
assertTrue("bit 101 is not set", !bits.get(101));
assertCardinality(bits, 2);
other.set(101);
@ -38,6 +41,7 @@ public class BitsetTest {
assertEquals("second bit is 100 from 100", 100, bits.nextSetBit(100));
assertEquals("third bit is 101", 101, bits.nextSetBit(101));
assertEquals("there is no 4th bit", -1, bits.nextSetBit(102));
assertCardinality(bits, 3);
assertEquals("first empty bit is 0", 0, bits.nextClearBit(0));
assertEquals("after 5, 6 is empty", 6, bits.nextClearBit(5));
@ -61,4 +65,8 @@ public class BitsetTest {
}
}
static void assertCardinality(BitSet set, int expectedCardinality) {
assertEquals("Checking cardinality", expectedCardinality, set.cardinality());
}
}