首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有重复键的映射实现

具有重复键的映射实现
EN

Stack Overflow用户
提问于 2009-06-30 10:35:12
回答 19查看 274.1K关注 0票数 128

我想要一个具有重复键的映射。

我知道有很多map实现(Eclipse向我展示了大约50个),所以我打赌肯定有一个允许这样做。我知道编写自己的地图很容易做到这一点,但我更愿意使用一些现有的解决方案。

也许是commons-collections或google-collections中的一些东西?

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2009-06-30 10:44:40

您正在搜索multimap,实际上commons-collections和Guava都有几个实现。多重映射允许通过维护每个键的值集合来支持多个键,例如,您可以将单个对象放入映射中,但您可以检索一个集合。

如果您可以使用Java5,我更喜欢Guava的Multimap,因为它是泛型感知的。

票数 93
EN

Stack Overflow用户

发布于 2011-06-15 10:57:14

我们不需要依赖Google Collections外部库。您可以简单地实现以下Map:

代码语言:javascript
运行
复制
Map<String, ArrayList<String>> hashMap = new HashMap<String, ArrayList>();

public static void main(String... arg) {
   // Add data with duplicate keys
   addValues("A", "a1");
   addValues("A", "a2");
   addValues("B", "b");
   // View data.
   Iterator it = hashMap.keySet().iterator();
   ArrayList tempList = null;

   while (it.hasNext()) {
      String key = it.next().toString();             
      tempList = hashMap.get(key);
      if (tempList != null) {
         for (String value: tempList) {
            System.out.println("Key : "+key+ " , Value : "+value);
         }
      }
   }
}

private void addValues(String key, String value) {
   ArrayList tempList = null;
   if (hashMap.containsKey(key)) {
      tempList = hashMap.get(key);
      if(tempList == null)
         tempList = new ArrayList();
      tempList.add(value);  
   } else {
      tempList = new ArrayList();
      tempList.add(value);               
   }
   hashMap.put(key,tempList);
}

请确保对代码进行微调。

票数 34
EN

Stack Overflow用户

发布于 2014-10-09 16:36:06

代码语言:javascript
运行
复制
Multimap<Integer, String> multimap = ArrayListMultimap.create();

multimap.put(1, "A");
multimap.put(1, "B");
multimap.put(1, "C");
multimap.put(1, "A");

multimap.put(2, "A");
multimap.put(2, "B");
multimap.put(2, "C");

multimap.put(3, "A");

System.out.println(multimap.get(1));
System.out.println(multimap.get(2));       
System.out.println(multimap.get(3));

输出为:

代码语言:javascript
运行
复制
[A,B,C,A]
[A,B,C]
[A]

注意:我们需要导入库文件。

http://www.java2s.com/Code/Jar/g/Downloadgooglecollectionsjar.htm

代码语言:javascript
运行
复制
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;

https://commons.apache.org/proper/commons-collections/download_collections.cgi

代码语言:javascript
运行
复制
import org.apache.commons.collections.MultiMap;
import org.apache.commons.collections.map.MultiValueMap;
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1062960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档