4

Hashmap のような分類を 2 つのキーと 1 つの値で実装する必要があります。たとえばHashmap<K1, K2, V>、2 つのキーは整数で、値は私が定義した汎用 MyObject です。

thisthis、およびthisの投稿を読みました。また、guava プロジェクトがtable インターフェイスを提供していることも知っていますが、プロジェクトをできるだけ小さく保つために (厳密に必要でない場合) 外部ライブラリを使用したくありません。そこで、SparseArrays を使用することにしました。私のキーは int であり、必ずしもゼロから開始して増加しているわけではないため、これがより良い選択であると考えました。

私はこの初期化を行います:

SparseArray<SparseArray<MyObject>> myObjectSparseArray = new SparseArray<SparseArray<MyObject>>();

では本題に行きましょう。この種の操作を行うことはできますか:

MyObject myObject = new MyObject();
myObjectSparseArray.get(3).put(2,myObject);

または私は次のようなことをする必要があります:

MyObject myObject = new MyObject();
myObjectSparseArray.put(3, new SparseArray<MyObject>());
myObjectSparseArray.get(3).put(2,myObject)

つまり、この 1 行で両方の SparseArray を初期化しますか?

SparseArray<SparseArray<MyObject>> myObjectSparseArray = new SparseArray<SparseArray<MyObject>>() 

私の場合、より良い実装があると思いますか?

4

2 に答える 2

1

2 つのキーと 1 つの値がある場合、通常のHashMaporSparseArrayを使用して、これら 2 つのキーを 1 つの値に結合します。であるキーと であるキーがString1 つあるとします。Longそのため、マップ キーは次のようになります (strKey + longKey).hashCode()。として使用してIntegerに保存しSparseArrayたり、 としてString使用したりできますHashMap

于 2013-03-22T14:50:09.143 に答える
0

トウをネストすることは、ペアの一意の最初のキーごとに新しいキーを割り当てるため、そもそもSparseArray持つ目的に反します。SparseArraySparseArraykey

これに対する適切な解決策は、hashmap を使用し、2 つの int 値を取るキー オブジェクト ( Pointなど) を使用するか、単純に 2 つのキーを保持するように定義したオブジェクトを使用することです。

于 2013-03-22T14:53:25.753 に答える