a のドキュメントはBitSet
、実装が必ずしも実際のブール配列ではないことを明確に示しています。特に:
すべてのビット セットには現在のサイズがあります。これは、ビット セットによって現在使用されているスペースのビット数です。サイズはビット セットの実装に関連するため、実装によって変わる可能性があることに注意してください。ビット セットの長さは、ビット セットの論理長に関連し、実装とは別に定義されます。
Java ライブラリ クラスのソースは公開されており、自分で簡単に確認できます。特に:
The internal field corresponding to the serialField "bits".
89
90 private long[] words;
速度に関しては; プロファイリングします。それはあなたが何をしているかによります。一般に、事前に速度について考えないでください。意味的に最も意味があり、最も明確なコードにつながるツールを使用してください。パフォーマンス要件が満たされていないことを確認し、ボトルネックを特定してから最適化してください。
いずれにせよ、明らかに、boolean 配列の値への直接アクセスは、long 配列のビットを見つけるよりも高速であると思いますが、2 つの long 値に対してビットごとの OR を実行する方が、64 に対して論理 OR を実行するよりも高速です。ブール値。少し考えてみてください。例えば:
613 public boolean get(int bitIndex) {
614 if (bitIndex < 0)
615 throw new IndexOutOfBoundsException("bitIndex < 0: " + bitIndex);
616
617 checkInvariants();
618
619 int wordIndex = wordIndex(bitIndex);
620 return (wordIndex < wordsInUse)
621 && ((words[wordIndex] & (1L << bitIndex)) != 0);
622 }
その他の違いとしては、明らかに API が異なります。BitSet
使用する必要がある可能性がある多くのビット操作を提供します。boolean
配列は配列です。最適な方法は、特定のアプリケーション要件によって異なります。