java - 按键比较两个 HashMap 并返回频率不同的键

标签 java data-structures hashmap

我想按键对两个 HashMap 进行排序并比较它们的值并打印出所有不具有相同值的键。你能帮我怎么做吗?这是我的代码如下。我是Java新手,正在一一学习数据结构。感谢您的帮助。

代码:-

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int val;

        int n = scan.nextInt();
        HashMap<Integer,Integer> h1 = new HashMap<Integer,Integer>();

        for( int i=0;i<n;i++ ) {           
             val = scan.nextInt();
             if(!h1.containsKey(val)) {
                 h1.put(val,1);
             }
            else {
                h1.put(val,h1.get(val)+1);
            }
         }

        int m = scan.nextInt();

        HashMap<Integer,Integer> h2 = new HashMap<Integer,Integer>();

         for( int i=0;i<m;i++ ) {           
             val = scan.nextInt();
             if(!h2.containsKey(val)) {
                 h2.put(val,1);
             }
            else {
                h2.put(val,h2.get(val)+1);
            }
         }

        System.out.println(h1.keySet());   
        System.out.println(h1.values());
        System.out.println(h2.keySet());   
        System.out.println(h2.values());

        }           
}

最佳答案

您无需对 HashMap 进行排序即可产生所需的输出。相反,构建一个 TreeSet<Integer>包含两个映射中的键的并集,如下所示

SortedSet<Integer> allKeysSorted = new TreeSet<Integer>();
allKeysSorted.addAll(h1.keySet());
allKeysSorted.addAll(h2.keySet());

使用TreeSet确保您的 key 已排序。现在您可以迭代allKeysSorted ,从每个map中获取对应的值,并进行相应的比较:

for (Integer key : allKeysSorted) {
    int v1, v2;
    if (h1.containsKey(key)) {
        v1 = h1.get(key);
    } else {
        v1 = 0;
    }
    if (h2.containsKey(key)) {
        v2 = h2.get(key);
    } else {
        v2 = 0;
    }
    ... // Compare v1 and v2 here
}

关于java - 按键比较两个 HashMap 并返回频率不同的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47317395/

相关文章:

java - 从 HashMap <String , String> 获取 JsonArray String 值

java - arg4j 的多个参数

java - 给定两个链表,找到一个列表是另一个列表的子列表的索引

algorithm - 如何压缩指针?例如。任意位指针

arrays - 如何找到最小值和最大值之间的子数组

java - 如何在具有特定优先级列表的元素之间进行选择?

java - ImageJ如何复制多边形

java - 如何在 JSF 中填充数据

java - Android 阻止应用程序在启动时查询空数据库

android - NullpointerException 在 LinkedHashMap 上使用 put 方法