(時間効率の良いスパース配列についていくつか質問がありますが、私はメモリ効率を探しています。)
List<T>
aまたはMap<Integer,T>
whichに相当するものが必要です
- 以前よりも大きなキーを設定するだけで、必要に応じて拡張できます。(キーが非負であると仮定できます。)
ArrayList<T>
ほとんどのインデックスが ではないnull
場合、つまり実際のデータがあまりまばらでない場合と同じくらいメモリ効率が良いです。- インデックスがまばらな場合、非インデックスの数に比例してスペースを消費し
null
ます。 - より少ないメモリを使用します
HashMap<Integer,T>
(これはキーをオートボックス化し、おそらくスカラー キー タイプを利用しないため)。 - N がエントリの数である償却された log(N) 時間で要素を取得または設定できます。線形時間である必要はありません。二分探索は許容されます。
- 非ウイルス性のオープンソースの純粋な Java ライブラリ (できれば Maven Central) に実装されています。
そのようなユーティリティクラスを知っている人はいますか?
Commons Collections に 1 つあると思っていましたが、そうではないようでした。
値の型が無償org.apache.commons.math.util.OpenIntToFieldHashMap
のように見えることを除いて、ほとんど正しいように見えるものに出くわしました。FieldElement
私はただ欲しいT extends Object
。ソース コードをより一般的なものに編集するのは簡単なようですが、利用可能な場合はバイナリ依存関係を使用したいと思います。