我有一个字节数组。有些是0,有些是1。
import java.util.Arrays;
byte[] bytes = new byte[100];
我想只循环1。怎么做?
答案 0 :(得分:1)
带有测试的for循环应该可以解决问题。
BitSet bs = new BitSet(100000000);
for (int i = 0; i < 100000000; i++) {bs.set(i);}
long stDate = System.currentTimeMillis();
for (int i = 0; (i = bs.nextSetBit(i + 1)) >= 0;) {// TODO}
long endDate = System.currentTimeMillis();
System.out.println(endDate - stDate);
byte[] bytes = new byte[100000000];
for (int i = 0; i < 100000000; i++) {bytes[i] = 1;}
stDate = System.currentTimeMillis();
for (byte b : bytes) { if (b == 1) // TODO}
endDate = System.currentTimeMillis();
System.out.println(endDate - stDate);
答案 1 :(得分:0)
我不想在所有数组上循环,因为它的大小很大。我
实际上100个字节是微不足道的。它使用2个缓存行。但是,如果你想提高性能,你可以使用一个位设置,每0或1只使用一位而不是8位。
BitSet bs = new BitSet(1 << 20); // 1 Mb
for(int i = 0; (i = bs.nextSetBit(i+1)) >= 0;)
System.out.println("Next set bit is " + i);
这仍然需要遍历数据,但它可以一次检查64位。