知識をバイト配列にビットとして格納します。セットされたビット数のカウントはかなり遅いです。アルゴリズムを改善するための提案は大歓迎です:
public static int countSetBits(byte[] array) {
int setBits = 0;
if (array != null) {
for (int byteIndex = 0; byteIndex < array.length; byteIndex++) {
for (int bitIndex = 0; bitIndex < 7; bitIndex++) {
if (getBit(bitIndex, array[byteIndex])) {
setBits++;
}
}
}
}
return setBits;
}
public static boolean getBit(int index, final byte b) {
byte t = setBit(index, (byte) 0);
return (b & t) > 0;
}
public static byte setBit(int index, final byte b) {
return (byte) ((1 << index) | b);
}
長さ 156'564 のバイト配列のビット数を数えるには 300 ミリ秒かかります。これは多すぎます。