私のアプリケーションでBitSet
を使用していて、BitSet
のすべての使用ビットがtrue
に設定されているかどうかを確認したいと思います。今、すべてのビットがfalse
に設定されているかどうかをチェックする方法isEmpty()
がわかりましたが、肯定的なケースを見つけることができません。私はsomeBitSet.cardinality() == someBitSet.size()
のようなことをすることができることを知っていますが、これは不器用なようです。私は何かを逃しているのですか、あるいはそのような方法が実装されていないという明白な理由はありますか?BitSetのすべてのビットがtrueに設定されていることを確認してください
3
A
答えて
6
「すべてのビットがBitSet
」のようなものはありません。なぜなら、これまで設定された最大ビットより大きなビットをいつでも設定できるからです。 BitSet
を最大10個の値に保持したいとします。したがって、10ビットを設定し、それらのすべてが真であるかどうかをチェックしたいと思います。しかし、BitSet
は、あなたが10ビットしか持っていないことを知りません。もしあなたがもっとあれば?次回はbitSet.set(10000)
に電話をかけると動作します(BitSet
は自動的にサイズ変更されます)。
一般的なケースでは、bitSet.size()
はそれほど役に立たないことに注意してください。消費されるメモリについてです。現在の実装は常に64の倍数であるため、異なる州が10つしかない場合、someBitSet.cardinality() == someBitSet.size()
は常にfalseを返します。 BitSet
をnew BitSet(10)
で作成した場合でもコンストラクタパラメータは、(ArrayList
のような)望ましい初期容量にすぎません。パフォーマンスヒントとしてのみ使用されます。
パフォーマンスの観点から最適なソリューションをmyLength
あなたは(あなたが自分でそれを維持する必要があります)BitSet
に格納する値の最大数ですnextClearBit(0) >= myLength
をチェックすることです。結果がfalse
の場合は、cardinality()
より速く動作します。
関連する問題
- 1. Java:特定のビットがlongに設定されているかどうかを確認してください
- 2. 変数のいずれかがNoneに設定されていることを確認してください。
- 3. QByteArrayの特定のビットを確認してください
- 4. クッキーが設定されているパスを確認してください
- 5. 変数が複数のスクリプトに設定されていることを確認してください
- 6. Liquibase:プロパティが設定されているか確認してください
- 7. Javascript - メールが設定されているか確認してください
- 8. Django userena mugshotが設定されているか確認してください
- 9. 提出前にすべてのダイナミックラジオボタンがチェックされていることを確認してください
- 10. すべてのAjaxがページにロードされていることを確認してください
- 11. NPMがインストールされていることを確認してください。ユーザー設定でtypescript.npmを設定してください。
- 12. ASP.NET 3.5 FrameworkがWindows Server 2003 64ビットにインストールされていることを確認してください
- 13. PreparedStatement内のすべてのプレースホルダが満たされていることを確認してください
- 14. (Excel Userform)Userformのすべてのチェックボックスがチェックされていることを確認してください。
- 15. kubernetesヘルムチャートのすべての値が使用されていることを確認してください。
- 16. すべての入力フィールドがjQueryで記入されていることを確認してください
- 17. すべてのチェックボックスがチェックされていることを確認してください
- 18. テスト:すべてのリソースがロードされていることを確認してください
- 19. すべてのフィールドが満たされていることを確認してください。Jquery
- 20. カフカの遅れをすべて確認してください
- 21. ブランチが実行されていることを確認してください。
- 22. iphone - アプリがインストールされていることを確認してください
- 23. Skypeがインストールされていることを確認してください
- 24. ヘッドセットが挿入されていることを確認してください
- 25. IONICサービスがロードされていることを確認してください。
- 26. プログラムがパイプされていることを確認してください
- 27. ALPNがサポートされていることを確認してください
- 28. キーが押されていることを確認してください。セレン
- 29. PEAR MAILがインストールされていることを確認してください
- 30. ipconfigが適用されていることを確認してください
しかし、ドキュメントには:_aビットセットに現在のサイズがあります。これは現在ビットセットによって使用されているスペースのビット数です。そのため、簡単に確認できれば便利だと思いましたそれらのすべてが真実に設定されたかどうか。編集:さて、今すぐあなたの編集を見た。ありがとう。それでは、ここで私のデータ構造が選択されていないかもしれないと思います。 – conipo
@ジョナサン、実際に64,128,192などのビットが必要な場合は動作します。他の初期サイズは自動的に64の次の倍数に拡張されます(実装の詳細ですが、それに頼ることはできません)。 –
['BitSet.length()'](https://docs.oracle.com/javase/8/docs/api/java/util/BitSet.html#length--)が見つからないようです: "*返品このBitSetの「論理サイズ」:BitSetの最高セットビットのインデックスに「size()」とは対照的に、まさに望ましいものです。ですから、あなたが望む操作は 'bs.length()== bs.nextClearBit(0)'です。これはうまく動作し、 'cardinality()'ベースの解決法よりも効率的ですが、まだ不器用です。 – Holger