1と0の配列をJavaで最も効率的に格納する方法は何ですか?Javaで0と1だけの配列を効率的に保存する
答えて
答えは、配列のサイズを事前に知っているかどうか、データがどれほど疎かランダムであるかによって異なります。
最も効率的なストレージを探している場合は、生の0と1を保存する代わりにデータを圧縮する必要があります。一般に良い圧縮アルゴリズムの1つはHuffman Codingですが、特にデータがランダムな場合は必ずしも「最良」であるとは限りません。 implementation hereが見つかります。
元の質問に戻り、生の値を保持したいと仮定します。最も効率的なストレージは、アレイのサイズを事前に知っているかどうかによって異なります。固定サイズの場合は、byte
プリミティブの数を作成できます。これらのそれぞれは、正確に1バイトと、それが格納されているオブジェクトのオーバーヘッドを取ります。必要に応じて、short
,int
、またはlong
を使用して2,4,8バイトをグループ化すると、変数の数を減らすことができます。これらの変数を他の変数を持つクラスのメンバとして含める場合、オブジェクト自体がオーバーヘッドのために8バイトをとり、サイズは常に8バイトの倍数になるため、使用する型に違いがあります。それで不足している変数は、複数の8バイトに埋め込まれます。
任意のサイズの配列(独自の12バイトのオーバーヘッド、オブジェクトの場合は8、配列の長さの場合は4)が必要な場合は、答えはbyte[]
の配列であり続けます。あなたの1と0です。しかし、JVMは8バイトのチャンクでメモリを割り当てますので、1〜4バイトはint
のメモリフットプリントになりますので、byte[]
の配列はshort[]
、またはint[]
のメモリフットプリントと最終的に一致し、実際に配列を割り当てる必要はありません(すべてのビットを効率的に使用することができる限り、long[]
は、12バイトのオブジェクトオーバーヘッドと16バイトの割り当てのため、他の整数型の配列よりも8バイト余分になります四捨五入一日の終わりに。
が、しかし、読みやすさ/使いやすさは、おそらくメモリ使用量を切り札。BitSet
店は、ボンネットの下にlong[]
などの値と友好アクセス方法を持っているし、最小限に抑えるために、おそらくここに最良の選択であります(厳密ではありませんが、実用的な目的には十分です)メモリフットプリント。
boolean[]
は、CPUを処理するのが最も速いでしょうが、プリミティブな整数型として8倍のメモリを消費します。
ここで間違っています。BitSetはlong値で値を格納しますが、各ビットはlongで表されます。 –
1から64ビットで1を長くする必要があります。あなたは65〜128ビットなど2ロングが必要です –
そうです。 –
あなたはBitSet
に行っていただきたいと思います。私はビットを格納する効率的な方法だと思う。 https://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html
いますが、
BitSetは、フードの下にlong []を使用するため、64ビットのチャンクにビットを格納します。 –
真では<64ビットでは効率的ではありませんが、大きなビットでは効率的です。 –
64の倍数を持たない限り、最も効率的ではありません。この場合、byte []を結びます。 –
として偽の0と1を真として扱う必要があり、私はあなたが最も「0の後、」1 'のを持っている場合、ほとんどの最もスペース効率的な方法は、バイナリ行列を格納すると思う、sparse matrixを使用しています。 疎な行列では、交差リスト構造を使用して '1'値のみを表す必要があります。
GitHubにいくつかの実装があります。
- 1. 他の配列で効率的にインデックスを付ける配列
- 2. データを効率的に保存する
- 3. 0-1の配列で矩形座標を効率的に見つける方法
- 4. 配列にまだ存在しない値でnumpy配列を効率的に拡張する
- 5. JSオブジェクトの配列対JSオブジェクトの効率的で効率的な配列
- 6. 行の配列の交差を効率的に見つける
- 7. 1対1の関係で配列を照合する効率的な方法
- 8. 動的アンケートを効率的に保存する方法は?
- 9. 一時的なユーザーデータを効率的に保存する方法
- 10. Djangoモデルでタイムゾーンを効率的に保存する方法は?
- 11. オブジェクトのビュー数を効率的に保存するには?
- 12. Laravelデータベース保存するだけの値でない配列は
- 13. 効率的なデータ保存、システム(例)
- 14. Javaで多次元配列を効率的に実装するには?
- 15. C++:サブストリングの配列内の文字列を効率的に見つける
- 16. SQL 2000データベースにオブジェクトを効率的に保存する方法
- 17. JSON文字列をCassandraカラムに効率的に保存するには?
- 18. スプリットnumpyの配列を効率的
- 19. Java/Android - 多くの変数を保存する最も効率的な方法
- 20. 複数の1次元配列から1次元配列にデータを効率的に集める
- 21. j2meゲームで効率的にスプライト配列をレンダリングするには?
- 22. ファイル制御ブロックを効率的に保存する
- 23. セマンティックグラフを効率的にビルドして保存する方法は?
- 24. リッチテキストを効率的に保存して表示する
- 25. julia-langファイルを効率的に保存/ロードする。
- 26. Javaで効率的にする方法
- 27. Java - 大量のString配列を効率的に格納する方法
- 28. できるだけ効率的にデータを数え、ランク付けする方法
- 29. 効率的な配列のループ
- 30. VBA配列変数で効率的に/ vlookupを見つける方法
配列の大きさはどれくらいですか? –
なぜこれらのビットに対して演算のタイプを実行する必要がありますか? – KevinO