2011年1月26日水曜日

BitSetの活用

Map<Integer, Boolean>などと使ってはいないだろうか?
Keyに応じて, フラグを立てておきたい場合, Mapを使うとメモリ的にも, 速度的にもBitSet
を使うべきだ。

ex )
BitSet bits = new BitSet();
bits.set(1);                  // 1にセット
bits.set(3);                  // 3にセット
bits.set(5);                  // 5にセット

for ( int i=bits.nextSetBit(0); i >= 0; i = bits.nextSetBit(i + 1) )
{
    // 順序よく操作, もし存在しなければ  i = -1となるので, これでループになる
    System.out.println( i + "君にフラグたってる");
}

result)
1君にフラグたってる
3君にフラグたってる
5君にフラグたってる

2 件のコメント:

  1. ループ内でiへの代入が抜けてますよ。i=bits.nextSetBit(i+1)

    返信削除
  2. ご指摘ありがとうございます。おっしゃる通りです。代入がないと, 次へいけませんね。

    返信削除