1

实现三项 hashMap 的最佳方法是什么?例如,我想使用一个常规的 String key ,但是让它映射到两个不同的对象。这个想法就像有一个列表列表,除了第一项是键。

我试图避免遍历列表(所以行为就像一个哈希图)。你同意唯一的方法是建立一个新的班级吗?似乎“HashMap3”对象(使用 get1(key) 和 get2(key) 方法)会很有用。我不确定如何自己设置。

如何创建集合?

4

4 回答 4

4

如果键总是恰好映射到两个对象,那么最简单的方法是创建一个Pair仅用于保存两个对象的类。然后你使用你的字符串作为键,使用Pair实例作为值。但是,如果键可以映射到任意多个对象,那么 IMO 最好的方法是将值存储在某种类型的 a 中MapCollection

于 2009-05-06T22:28:11.250 回答
0

看看 google-collections Multimap

类似于 Map 的集合,但可以将多个值与单个键相关联。如果您使用相同的键但值不同的两次调用 put(K, V),则多重映射包含从键到两个值的映射。

于 2009-05-06T22:32:36.857 回答
0

也许是散列的散列?

于 2009-05-06T22:33:48.210 回答
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 个对象列表,您可以将这些对象放入 java.util.collections.ArrayList 并使用 ArrayList 作为 Map 值。

于 2009-05-06T23:10:11.680 回答