什么是最好的方式来实施三个项目哈希?例如,我想到使用常规串钥匙,但它的地图,以两个不同的对象。这个想法是像有一个列表中列出,除了第一项是关键。

我试图避免重复通过的清单(这样的行为就像是哈希).你会同意的唯一方法是建立一个新的课吗?这似乎是一个"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值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top