实现三项 hashMap 的最佳方法是什么?例如,我想使用一个常规的 String key ,但是让它映射到两个不同的对象。这个想法就像有一个列表列表,除了第一项是键。
我试图避免遍历列表(所以行为就像一个哈希图)。你同意唯一的方法是建立一个新的班级吗?似乎“HashMap3”对象(使用 get1(key) 和 get2(key) 方法)会很有用。我不确定如何自己设置。
如何创建集合?
实现三项 hashMap 的最佳方法是什么?例如,我想使用一个常规的 String key ,但是让它映射到两个不同的对象。这个想法就像有一个列表列表,除了第一项是键。
我试图避免遍历列表(所以行为就像一个哈希图)。你同意唯一的方法是建立一个新的班级吗?似乎“HashMap3”对象(使用 get1(key) 和 get2(key) 方法)会很有用。我不确定如何自己设置。
如何创建集合?
如果键总是恰好映射到两个对象,那么最简单的方法是创建一个Pair
仅用于保存两个对象的类。然后你使用你的字符串作为键,使用Pair
实例作为值。但是,如果键可以映射到任意多个对象,那么 IMO 最好的方法是将值存储在某种类型的 a 中Map
。Collection
看看 google-collections Multimap
类似于 Map 的集合,但可以将多个值与单个键相关联。如果您使用相同的键但值不同的两次调用 put(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 个对象列表,您可以将这些对象放入 java.util.collections.ArrayList 并使用 ArrayList 作为 Map 值。