10

(時間効率の良いスパース配列についていくつか質問がありますが、私はメモリ効率を探しています。)

List<T>aまたはMap<Integer,T>whichに相当するものが必要です

  1. 以前よりも大きなキーを設定するだけで、必要に応じて拡張できます。(キーが非負であると仮定できます。)
  2. ArrayList<T>ほとんどのインデックスが ではないnull場合、つまり実際のデータがあまりまばらでない場合と同じくらいメモリ効率が良いです。
  3. インデックスがまばらな場合、非インデックスの数に比例してスペースを消費しnullます。
  4. より少ないメモリを使用しますHashMap<Integer,T>(これはキーをオートボックス化し、おそらくスカラー キー タイプを利用しないため)。
  5. N がエントリの数である償却された log(N) 時間で要素を取得または設定できます。線形時間である必要はありません。二分探索は許容されます。
  6. 非ウイルス性のオープンソースの純粋な Java ライブラリ (できれば Maven Central) に実装されています。

そのようなユーティリティクラスを知っている人はいますか?

Commons Collections に 1 つあると思っていましたが、そうではないようでした。

値の型が無償org.apache.commons.math.util.OpenIntToFieldHashMapのように見えることを除いて、ほとんど正しいように見えるものに出くわしました。FieldElement私はただ欲しいT extends Object。ソース コードをより一般的なものに編集するのは簡単なようですが、利用可能な場合はバイナリ依存関係を使用したいと思います。

4

5 に答える 5

6

あなたの意図のために働くことができる TIntObjectMapがあります。

于 2012-09-27T16:49:08.270 に答える
5

インスピレーションを得るために、Android の SparseArray 実装を調べます。ここから AOSP のソース コードをダウンロードして、ソースを表示できますhttp://source.android.com/source/downloading.html

于 2013-04-22T03:50:34.127 に答える
1

テスト ケースをjglick/inthashmapとして保存しました。結果:

HashMap size: 1017504
TIntObjectMap size: 853216
IntHashMap size: 846984
OpenIntObjectHashMap size: 760472
于 2012-09-27T17:08:52.870 に答える