私はArrayList<Integer>
自分の研究プロジェクトで使用しています。このリストに不明な数の整数を保持する必要があります。リストを更新する必要がある場合があります。既存のレコードを削除するか、新しいレコードを追加します。オブジェクトであるため、それは。Integer
だけよりもはるかに多くのメモリを消費していますint
。より少ないメモリを消費するリストを維持するための代替方法はありますInteger
か?
4 に答える
Colt ライブラリのものなど、メモリ使用量が最適化された整数リストの実装を試してください。
http://acs.lbl.gov/software/colt/api/cern/colt/list/IntArrayList.html
通常、Java Integer オブジェクトは int プリミティブよりも多くのオーバーヘッドを必要とするため、スペースが最適化された実装が必要です。
コルトより:
たとえば、CERN で実施されている科学的および技術的コンピューティングは、要求の厳しい問題サイズと、適度に小さいメモリ フットプリントでの高性能の必要性によって特徴付けられます。[...]
int-sで配列を使用し、ArrayListと同じロジックで独自のメソッドを作成できます。しかし、それは悪い考えです-最近のマシンには整数オブジェクトを使用するのに十分なメモリがあります、私を信じてください... :)
また、alternative ストレージ システムについても検討する必要がありますArrayList
。リンクメカニズムに関しては、すべての要素には、値自体として(場合によっては)より多くのメモリを消費するオーバーヘッドがあります。注文する必要はないかもしれません。これが適用可能か、または独自のデータ構造を実装するかMap
を簡単に考えましたか?Set
言語にもよりますが、Javaだと思います。Java では、おそらくご存じのとおり、int はプリミティブ データ型であるため、ArrayList で使用できません。int を使用するには、固定サイズの通常の配列を使用する必要があります。つまり、何かを追加するたびに、より大きなサイズの新しい配列を作成する必要があります。これにより、要素の数が配列よりも大きくなると想定されます。より多くのコードを記述し、int を前後に移動する必要があるため、メモリを複雑さと交換します。
メモリ使用量の削減は、その作業に見合う価値がなく、そのようなソリューションを実装する際のバグのリスクが高くなります。