循环字节数组仅用于1

时间:2015-12-31 10:14:43

标签: java arrays

我有一个字节数组。有些是0,有些是1。

import java.util.Arrays;

byte[] bytes = new byte[100];

我想只循环1。怎么做?

2 个答案:

答案 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位。