三个项目哈希没有内部的迭代
-
06-07-2019 - |
题
什么是最好的方式来实施三个项目哈希?例如,我想到使用常规串钥匙,但它的地图,以两个不同的对象。这个想法是像有一个列表中列出,除了第一项是关键。
我试图避免重复通过的清单(这样的行为就像是哈希).你会同意的唯一方法是建立一个新的课吗?这似乎是一个"HashMap3"目的(与法get1(key)&get2(key))将是有益的。我不清楚如何设置这个了我自己。
我怎么能创造的收集?
解决方案
如果密钥总是映射到完全两个对象,那么最简单的方法是创建一个 Pair
类,它只存在于两个对象中。然后使用String作为键,使用 Pair
实例作为值。但是,如果键可以映射到任意多个对象,那么IMO最好的方法是将 Map
中存储的值设置为某种 Collection
。
其他提示
看谷歌-集合 基于
一个收集类似于地图,但是 它可以将多个值 与一个单一的关键。如果你打电话把(K, V)的两倍,同样关键的但是 不同的价值观,基于 包含映射的关键 值。
散列哈希也许?
我同意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值。