1

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

リストを繰り返し処理することを避けようとしています (そのため、動作は hashmap のようになります)。新しいクラスを構築することが唯一の方法であることに同意しますか? 「HashMap3」オブジェクト ( get1( key ) & get2( key ) のメソッドを使用) が役立つようです。これを自分で設定する方法がわかりません。

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

4

4 に答える 4

4

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

于 2009-05-06T22:28:11.250 に答える
0

google-collections Multimapを見てください

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

于 2009-05-06T22:32:36.857 に答える
0

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

于 2009-05-06T22:33:48.210 に答える
0

私はエディに同意します.2つではなく、多くの値でのみ同様の問題が発生しました。Java ConcurrentHashMap に、Web サービスからフェッチされるドキュメントのキャッシュ XML を保持する必要がありました。また、XML と共にさまざまな情報を記録して、キャッシュの削除戦略をサポートする必要がありました (例: 使用頻度が最も低い、使用頻度が最も低い)。

解決策は、それらのアイテムを保持するオブジェクトのクラスを定義することだけでした。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 オブジェクトのリストにマップする必要がある場合は、それらのオブジェクトを java.util.collections.ArrayList に配置し、ArrayList を Map 値として使用できます。

于 2009-05-06T23:10:11.680 に答える