コンパクトなブール配列の実装の何が問題になっていますか?動作していません。テストが失敗しているので、ビット演算を正しく実行していません。:(
public class CompactBooleanArray {
private final int size;
private final long[] bitmap;
public CompactBooleanArray(int size) {
this.size = size;
int numberOfLongs = (size + 63) / 64;
bitmap = new long[numberOfLongs];
}
public final void set(int index, boolean value) {
int longIndex = index >> 6;
int bitPosition = index & 63;
if (value) {
bitmap[longIndex] |= (1 << bitPosition);
} else {
bitmap[longIndex] &= ~(1 << bitPosition);
}
}
public final boolean get(int index) {
int longIndex = index >> 6;
int bitPosition = index & 63;
return (bitmap[longIndex] & (1 << bitPosition)) != 0;
}
public final int length() {
return size;
}
}
私の失敗したテスト:
public class CompactBooleanArrayTest {
@Test
public void testSimple() {
int[] x = { 4, 56, 60 };
CompactBooleanArray array = new CompactBooleanArray(100);
for(int i : x) array.set(i, true);
for(int i = 0; i < array.length(); i++) {
System.out.println("I: " + i + " -> " + array.get(i));
if (check(i, x)) {
Assert.assertTrue(array.get(i));
} else {
Assert.assertFalse(array.get(i));
}
}
}
private boolean check(int value, int[] array) {
for(int i : array) {
if (value == i) return true;
}
return false;
}
}