質問

3項目のhashMapを実装する最良の方法は何ですか? たとえば、通常のStringキーを使用しますが、2つの異なるオブジェクトにマップします。最初のアイテムがキーであることを除いて、リストのリストを持つようなものです。

リストの繰り返し処理を回避しようとしています(そのため、動作はハッシュマップのようになります)。新しいクラスを作成することが唯一の方法だと思いますか? " HashMap3"のようです。オブジェクト(get1(key)&get2(key)のメソッドを使用)は便利です。これを自分で設定する方法がわかりません。

コレクションを作成するにはどうすればよいですか

役に立ちましたか?

解決

キーが常に2つのオブジェクトに正確にマッピングする場合、これを行う最も簡単な方法は、2つのオブジェクトを保持するためだけに存在する Pair クラスを作成することです。次に、文字列をキーとして使用し、 Pair インスタンスを値として使用します。ただし、キーが任意の数のオブジェクトにマップできる場合、IMOを実行する最良の方法は、 Map に格納されている値を何らかの Collection にすることです。

他のヒント

google-collections をご覧くださいマルチマップ

  

マップに似たコレクションですが、   複数の値を関連付けることができます   単一のキーで。 put(K、   V)2回、同じキーで   異なる値、マルチマップ   キーから両方へのマッピングが含まれています   値。

A ハッシュハッシュおそらく?

私はエディに同意しますが、2つではなく、多くの値のみで同様の問題が発生しました。 Java ConcurrentHashMapに、Webサービスから取得されるドキュメントのキャッシュXMLを保持させたいので、キャッシュのエビクション戦略をサポートするために、XMLとともにさまざまな情報を記録する必要がありました(たとえば、Least Recent Used、Least Frequently Used)

解決策は、それらのアイテムを保持するオブジェクトのクラスを定義することでした。 Cacheクラス内で、次のようなプライベートネストクラスを使用しました。

private static class CacheEntry
{
    private String  uri;          // Key
    private String  fetched_xml;  // The XML document (main value)
    private long    put_time;
    private long    expires_time;
    private long    size;
    private long    hits;
    private long    last_used_time;
}

ConcurrentHashMapはURIに基づいており、次のようになりました。

private final Map<String, CacheEntry> cache;
    [...]
cache = new ConcurrentHashMap<String, CacheEntry>(100, 0.75f, 3);

このコードは、新しいXMLドキュメントをキャッシュに追加します:

CacheEntry value = new CacheEntry();
value.fetched_xml(fetched_xml); 
value.uri = uri;
value.put_time = System.currentTimeMillis();
value.expires_time = representation.getExpirationDate().getTime();
value.size = bytes_fetched;
value.hits = 0;
value.last_used_time = 0;
cache.put(uri, value);

編集: Javaのn個のオブジェクトの List にキーをマップする必要がある場合、それらのオブジェクトをjava.util.collections.ArrayListに配置し、 ArrayListをMap値として使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top