实现三项hashMap的最佳方法是什么? 例如,我想使用常规的String键,但让它映射到两个不同的对象。这个想法就像拥有一个列表列表,除了第一个项目是一个密钥。
我试图避免遍历列表(所以行为就像一个hashmap)。你是否同意唯一的方法是建立一个新的类?似乎“HashMap3”对象(使用get1(key)& get2(key)的方法)会很有用。我不确定如何自己设置它。
如何创建集合?
答案 0 :(得分:4)
如果密钥始终映射到完全两个对象,那么最简单的方法是创建一个仅存在两个对象的Pair
类。然后使用String作为键,Pair
实例作为值。但是,如果密钥可以映射到任意多个对象,那么IMO最好的方法是将Map
中存储的值保存为某种Collection
。
答案 1 :(得分:0)
查看google-collections Multimap
类似于地图的集合,但是 这可能会关联多个值 用一把钥匙。如果你叫put(K, V)两次,使用相同的键但是 不同的值,多图 包含从键到两者的映射 值。
答案 2 :(得分:0)
也许是hash of hashes?
答案 3 :(得分:0)
我同意Eddie的观点,只是有很多价值观,而不是两个。我希望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个对象的 List ,您可以将这些对象放在java.util.collections.ArrayList和使用ArrayList作为Map值。