当前位置: 首页 > 知识库问答 >
问题:

哈什地图。在两个hashmaps之间查找具有相同值的键

苏翰学
2023-03-14
 HashMap<String, Integer> map1  = new HashMap<>(); 
 map1.put("vishal", 10); 
 map1.put("sachin", 30); 
 map1.put("vaibhav", 20); 

 HashMap<String, Integer> map2  = new HashMap<>(); 
 map2.put("Raja", 10); 
 map2.put("John", 30); 
 map2.put("Krishna", 20); 

共有1个答案

秦光启
2023-03-14

可以将时间复杂度提高到O(n+m),其中n是第一个映射的大小,m是第二个映射的大小。

  • 我们可以通过将设置为键,将设置为值来实现这一点。
  • 步骤:
    • 遍历每个映射。
    • 将所有当前映射值存储在新映射中,并在列表中收集所有具有该值的键,并将当前值与此列表一起放在新映射中。
    • 现在,遍历任何一个新的地图集合,并获得用于打印的公共键和相应的值。

    片段:

    private static void showCommonValueKeys(HashMap<String, Integer> map1,HashMap<String, Integer> map2){
        Map<Integer,List<String>> map1Collect = flipKeyValue(map1);
        Map<Integer,List<String>> map2Collect = flipKeyValue(map2);
    
        for(Map.Entry<Integer,List<String>> m : map1Collect.entrySet()){
            int key = m.getKey();
            if(map2Collect.containsKey(key)){
                System.out.println("For value " + key);
                System.out.println("First map keys: " + m.getValue().toString());
                System.out.println("Second map keys: " + map2Collect.get(key).toString());
                System.out.println();
            }
        }
    
    }
    
    private static  Map<Integer,List<String>> flipKeyValue(HashMap<String, Integer> map){
         Map<Integer,List<String>> mapCollect = new HashMap<>(); 
    
         for(Map.Entry<String,Integer> m : map.entrySet()){
            String  key = m.getKey();
            int val = m.getValue();
            mapCollect.putIfAbsent(val,new ArrayList<>());
            mapCollect.get(val).add(key);
         }
    
         return mapCollect;
    }
    

 类似资料:
  • 我有两个哈希要合并。它们看起来像这样: 第二个散列看起来像: 我想合并这两个散列数组,结果如下所示: 有没有一种简单的方法来合并这两个哈希,或者我必须逐个遍历哈希并在另一个哈希中找到该键?

  • 问题内容: 如果我想找出两个键中是否没有一个键与另一个键不同,并且该键的值彼此匹配,如何最好地比较两个键。 将A与B进行比较时,由于B和D键的不同,它应该会失败。 如何最好地比较未排序的哈希图? 问题答案: 做一个支票上两者秒。 注意: 如果您包含键,那没有问题,但是如果您的Map包含类型键,则需要确保您的类实现了。

  • 问题内容: Hashcode()和equals()的概念是 1)如果两个对象根据equal()相等,则在这两个对象中的每一个上调用hashcode方法应产生相同的哈希码。 另一个是 2)如果两个对象根据equal()不相等,则不需要在两个对象中的每一个上调用hashcode方法必须产生不同的值。 我尝试并理解了第一个,这是第一点的代码。 上面的程序为两个不同的对象提供了相同的哈希码。 有人可以用一

  • 问题内容: 我试图找到具有重复值,但仅基于选定的列数,而不是单个列或整个行的行。例如,如果我的表如下所示: 我的问题是: 查找行的“地址和状态”字段与另一行的“地址和状态”字段匹配的行的所有ID。 该查询的答案将是: 有任何想法吗? 意见建议: 如何从单个表中选择同一行中的多列值 问题答案: 请尝试以下方法:

  • 假设这两个对象有相同的键;

  • 我会从我想达到的目标开始 意图 该软件在for循环中解析XML数据。处理数据的 for 循环将持续到 50(因为我得到了 50 个不同的结果)。我最初所做的是,-方法解析整个XML数据并将其保存到TextViews中并显示它。但现在我想添加一个启动画面,只要数据加载就会显示。 XML文件像任何其他普通XML文件一样构建,因此当我通过for循环时,键总是相同的,但值不同。 方法 我已经做的是创建一个