私はエディに同意します.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 値として使用できます。