使用重复键的映射实现

2022-08-31 08:24:57

我想要一个包含重复键的地图。

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

也许是共享资源集合或谷歌集合中的某些内容?


答案 1

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

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


答案 2

我们不需要依赖 Google Collections 外部库。您只需实现以下映射:

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);
}

请确保对代码进行微调。


推荐