【问题标题】:Map with duplicate values具有重复值的映射
【发布时间】:2014-02-07 05:39:02
【问题描述】:

我已经解决了与相同问题相关的问题,但我不清楚如何使用重复条目来实现地图。我在面试中被问到这个问题。请给我一些指导。

例如,一家公司有两名同名和相同发展领域的员工,即。 map.put("Tom Hank","Java");

map.put("Tom Hank","Java");

众所周知,我们不能在HashMap 中存储重复值。那么我可以实现这个并根据键检索值吗?还是有其他更好的解决方案?

这些是我经历过但无法理解如何做到这一点的问题。

How to include duplicate keys in HashMap? | How can i have a HashMap in Java with duplicate keys

【问题讨论】:

  • 你从这些问题中没有明白什么?那里的答案甚至包括工作示例。
  • 答案与 Google 的库有关,但我的面试官可能对逻辑感兴趣。
  • 为什么不使用 Map>?
  • 你的面试官真的告诉你使用地图吗?我的意思是,我肯定会创建一个Employee 类,其中有一个Set<String> 作为属性,存储开发区域,然后维护一个Set<Employee>
  • “我不清楚如何使用重复条目来实现映射” - Maps 没有重复键,故事结束。要么你的面试官在和你开玩笑,要么你没有给我们完整的问题。

标签: java collections hashmap


【解决方案1】:

Map 不支持重复键。您可以将集合用作针对同一键的值。

因为如果映射先前包含键的映射,则旧值将替换为指定值。

Map<Integer, List<String>>

你可以使用这样的东西。

【讨论】:

    【解决方案2】:

    希望对你有帮助:

    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.commons.collections.MultiHashMap;
    import org.apache.commons.collections.MultiMap;
    import org.apache.commons.collections.map.HashedMap;
    
    public class TryingMultiMap {
        public Map<String, String> testMap(MultiMap m) {
            Map<String, String> m_copy = new HashMap();
            m_copy.putAll(m);
            System.out.println(m_copy);
            return m_copy;
        }
    
        public static void main(String[] args) {
            System.out.println("test");
            MultiMap m = new MultiHashMap();
            m.put("Bhaskar","Java");
            m.put("Bhaskar","Java");
            m.put("Ravi",".Net");
            m.put("Ravi", ".Net");
            m.put("Suyash","C++");
            System.out.println(m);
    
            /*Map exhibitMap= new HashMap();
            h.put("Bhaskar", "Java");
            h.put("Bhaskar", "Java");
            System.out.println("exhibitMap"+ExhibitMap)*/;
    
            TryingMultiMap obj = new TryingMultiMap();
            obj.testMap(m);
        }
    
    }
    

    它如何将您的问题带入图片,是通过拥有一个可以包含重复项的多图。最后,将 multimap 放入地图中,您会发现在新地图中也添加了重复的 MultiMap。另外,在 main 方法中找到注释代码,它表明 Map 不能保存重复项。

    不过,我发现 Armas 提供的解决方案也是一个非常合适的解决方案。 希望对你有帮助:)

    【讨论】:

      【解决方案3】:

      在谷歌中输入multimaps,你会找到你要找的东西。

      另一种方法是按照以下方式进行模拟多地图:

      Map<String, List<String>> multimap=new Map<String, List<String>>();
      if (multimap.contains("Tom Hanks"){
         multimap.get("Tom Hanks").add("value2");
      }
      else {
         List<String> values=new ArrayList<String>();
         values.add("value1");
         multimap.put("Tom Hanks", values);
      }
      

      但是找到一个多地图实现会为您省去所有的麻烦。

      【讨论】:

      • 请注意,我没有在此代码中进行任何安全检查(针对空值)。该代码只是说明如何伪造多图的一种方式。
      • Google 的 Multimap 是必经之路
      猜你喜欢
      • 1970-01-01
      • 2019-10-28
      • 2010-11-06
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      相关资源
      最近更新 更多