2009-07-15 14 views
1

マッピングと配列の両方の機能を提供するジェネリックコレクションクラスを使用できますか。たとえば、StringをDoubleにマップする場合、そのキーをインデックスとして使用して値を参照したいとします。Java - コレクションの選択

collection[key] = collection[key] + double 

Googleコレクションライブラリは、このような機能を備えていますか?

ありがとうございました。

答えて

2

Javaはあなたがコレクションでブラケットの構文を使用せませんが、あなたは何ができます主キーの「参照」列があるデータ構造内のデータベーステーブル。 HashMapはそれだけではありません(私が知る限り)。

私は自分のデータ構造を作成したと思います。インデックス値でマップされた複数の配列を含むクラス。私は、RowDataクラスを作成し、各行データをHashMapに格納することができたと思います。うーん。

誰かがおそらく私よりもはるかに優れた説明をすることができます。初心者です。

+0

(1年後に誰かがこれを読んでいるなら、JDK7はコレクションのための '[]'構文を持っているかもしれません) –

+0

おかげでトム、私はそれが計画されているのか分かりませんでした。 Java 7が出てきたときに戻ってくるのを忘れたら、誰かが私にpingしてくれることを願っています。 –

1

+0

HashMapのは、あなたが直接検索に反対思い付くしようとしている最もパフォーマンスの事についてです。追加は、リンクされたリストよりもわずかに遅くなることがあります。メモリが厳しく制限されていない限り、配列やArrayListへのインデックスを除く任意の検索状況で、パフォーマンスのためにハッシュを打つことはありません。 –

2

あなたのキーは文字列でどちらか:-)あなたが一種のここで選択する必要があります。

Map<String, Double> myMap = new HashMap<String, Double>(); 
myMap.put("key1", 5.0); // caution - auto-wrap 
myMap.put("key1", myMap.get("key1") + 5.0); // caution - auto-wrap 

か、それはint型です:

double[] myArray = new double[size]; 
int key1 = 1; 
myArray[key1] = 5.0; 
myArray[key1] += 5.0; 
1

私はあなたの例では、配列を使用する方法が表示されませんのような機能です。配列インデックス演算子のオーバーロードを意味しますか?もしそうなら、Javaは演算子のオーバーロードを許さないことを知っておくべきです。

実際に配列操作が必要な場合は、LinkedHashMapを使用してキー値の参照を行い、値内の順序を追跡することができます。これは主にLRUキャッシュを構築するのに便利です。私が表現したかったところ

HashMap<String, Double> collection = new HashMap<String, Double>(); 

String key = "some key"; 
... 

if(collection.containsKey(key)) 
{ 
    // increment the value 
    collection.put(key, collection.get(key) + 1.0); 
} 
else 
{ 
    // initialize the value 
    collection.put(key, 0.0); 
} 
+0

私はC#モードでした。配列インデックス演算子はまさに私が考えていたものです。 – javacavaj

0

はええ、私はしばらく前に、同じことをやってみたかった:何かのように

1

最も近いのはLinkedHashMapです。これは要素の予測可能な順序を示しますが、指定したインデックスを高速に検索することはできません(LinkedListのようなものです)。特定のインデックスで特定する方法はありませんが、独自のインデックスを追加する必要があります。

+0

うん、この回答はチケットです。例を挙げます:http://www.java-examples.com/simple-java-linkedhashmap-example – djangofan

0

配列のような機能や配列のような構文を意味しますか? Javaでは、コレクションに配列のような構文を使用することはできませんが、すべてのコレクションには配列のような機能があります。

ペア(キー/値)を保存し、インデックスを使用してそれらにアクセスできるようにする(配列の場合と同様に)場合は、名前を付けた "LinkedHashMap"コレクションがあります。

両方向にインデックスを付ける場合(コレクションのいずれかの側がキーになる場合があります)、2つのハッシュマップを含む独自のコレクションを作成し、オブジェクトがコレクションに追加されるたびに両方のマップに追加します。

関連する問題