Я согласен с Эдди, и у меня была похожая проблема только со многими значениями, а не с двумя. Я хотел, чтобы Java ConcurrentHashMap содержал кэш 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);
Редактировать: Если вам нужно сопоставить ключ с списком из n объектов в Java, вы можете поместить эти объекты в java.util.collections.ArrayList и использовать ArrayList в качестве значения карты.