Data structures 无内部迭代的三项HashMap

Data structures 无内部迭代的三项HashMap,data-structures,collections,hashtable,hashmap,Data Structures,Collections,Hashtable,Hashmap,实现三项hashMap的最佳方法是什么? 例如,我想使用常规字符串键,但要将其映射到两个不同的对象。这个想法就像拥有一个列表列表,只是第一项是一个键 我试图避免遍历列表(因此该行为类似于hashmap)。你同意唯一的方法是建立一个新的类吗?“HashMap3”对象(带有get1(key)和get2(key)方法)似乎很有用。我不知道如何设置这个自己 如何创建集合?如果密钥始终映射到正好两个对象,那么最简单的方法是创建一个仅存在用于保存这两个对象的对类。然后使用字符串作为键,使用对实例作为值。但是

实现三项hashMap的最佳方法是什么? 例如,我想使用常规字符串键,但要将其映射到两个不同的对象。这个想法就像拥有一个列表列表,只是第一项是一个键

我试图避免遍历列表(因此该行为类似于hashmap)。你同意唯一的方法是建立一个新的类吗?“HashMap3”对象(带有get1(key)和get2(key)方法)似乎很有用。我不知道如何设置这个自己


如何创建集合?

如果密钥始终映射到正好两个对象,那么最简单的方法是创建一个仅存在用于保存这两个对象的
类。然后使用字符串作为键,使用
实例作为值。但是,如果键可以映射到任意多个对象,那么最好的方法是将存储在
映射中的值作为某种类型的
集合。

如果键始终映射到两个对象,然后,最简单的方法是创建一个只存在用于保存这两个对象的
Pair
类。然后使用字符串作为键,使用
实例作为值。但是,如果密钥可以映射到任意多个对象,那么我认为最好的方法是将
map
中存储的值作为某种类型的
集合

类似于地图的集合,但 它可以关联多个值 用一把钥匙。如果你调用put(K, 五) 两次,用同一把钥匙,但是 不同的值,多重映射 包含从键到两者的映射 价值观


看看谷歌收藏

类似于地图的集合,但 它可以关联多个值 用一把钥匙。如果你调用put(K, 五) 两次,用同一把钥匙,但是 不同的值,多重映射 包含从键到两者的映射 价值观


A maybe?

A maybe?

我同意Eddie的观点,只是有一个类似的问题,只是有很多值,而不是两个。我想要一个Java ConcurrentHashMap来保存从web服务获取的文档的缓存XML,并且我需要在XML旁边记录各种信息,以支持缓存的逐出策略(例如,最近使用最少、使用最少)

解决方案只是定义一个包含这些项的对象类。我在缓存类中使用了一个私有嵌套类,如下所示:

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;
}
private final Map<String, CacheEntry> cache;
    [...]
cache = new ConcurrentHashMap<String, CacheEntry>(100, 0.75f, 3);
ConcurrentHashMap在URI上键入,如下所示:

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;
}
private final Map<String, CacheEntry> cache;
    [...]
cache = new ConcurrentHashMap<String, CacheEntry>(100, 0.75f, 3);

编辑:如果您需要将一个键映射到Java中n个对象的列表,您可以将这些对象放入Java.util.collections.ArrayList中,并使用ArrayList作为映射值。

我同意Eddie的观点,只是在许多值上遇到了类似的问题,而不是两个值。我想要一个Java ConcurrentHashMap来保存从web服务获取的文档的缓存XML,并且我需要在XML旁边记录各种信息,以支持缓存的逐出策略(例如,最近使用最少、使用最少)

解决方案只是定义一个包含这些项的对象类。我在缓存类中使用了一个私有嵌套类,如下所示:

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;
}
private final Map<String, CacheEntry> cache;
    [...]
cache = new ConcurrentHashMap<String, CacheEntry>(100, 0.75f, 3);
ConcurrentHashMap在URI上键入,如下所示:

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;
}
private final Map<String, CacheEntry> cache;
    [...]
cache = new ConcurrentHashMap<String, CacheEntry>(100, 0.75f, 3);

编辑:如果需要将键映射到Java中n个对象的列表,可以将这些对象放在Java.util.collections.ArrayList中,并使用ArrayList作为映射值。

能否详细说明一下?这三项是什么?你是什么意思?存储3个条目的哈希映射?或者一个key1=>key2=>value散列映射?你是说一个带有复合键的散列映射吗?你能详细说明一下吗?这三项是什么?你是什么意思?存储3个条目的哈希映射?或者一个key1=>key2=>value散列图?你是说一个具有复合键的散列图吗?Google Multimap似乎返回一个集合,该集合仍然需要迭代。。。是你提到了ApacheFlat3Map吗?我想知道为什么这个建议被删除了。我确实发布了关于Flat3Map的文章,但后来意识到你想要一个键有两个值。Flat3Map是关于small(Size)的快速访问Google Multimap似乎返回了一个集合,它仍然需要迭代…是你提到了Apache Flat3Map吗?我想知道为什么这个建议被删除了。我确实发布了关于Flat3Map的文章,但后来意识到你想要一个键有两个值。Flat3Map是关于small的快速访问(sizeI不认为这比构建一个处理多个值的“collection”对象更简单。它似乎是一个“HashMap3”对象(使用get1(key)和get2(key)方法)会很有用。我自己不确定如何设置它。这比构建自己的集合对象要简单得多。集合接口很大,有许多可选方法。配对对象很简单。是的,使用新集合(HashMap2表示一个键有两个值)Pair类的用法大致相同。但是创建Pair对象很简单,创建新的集合类很复杂,特别是如果您希望它是线程安全的,并且实现所有可选方法的话。由于我自己似乎无法想出一个方法,我不得不同意。我认为hashMap(key,ArrayList)将非常简单,仍然可以扩展,并且如果插入顺序一致,则不需要迭代。这比艰难地创建新集合更简单。谢谢您的时间,Eddie。我认为这不会比构建一个处理多个值的“集合”对象更简单。它似乎是一个“HashMap3”对象(使用get1(key)和get2(key)方法)将非常有用。我自己不确定如何设置它。这将比构建自己的集合对象简单得多。集合接口很大,有很多