有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java检查HashMap值是否相等

我需要写一个循环,看看HashMap中的值是否相等,如果相等,看看它们出现了多少次。数字集将通过扫描仪输入(下面是输入示例)。下面的代码将把count键和HashSet的值放入hashMap中

public static void main(String[] args) {
    System.out.println("Type in your numbers followed by spaces and press enter");
    System.out.println("After every set entered type in any letter to enter more sets");
    System.out.println("Or enter * to finish");

    HashMap<Integer, HashSet<Integer>> hset = new HashMap<>();
    Scanner sc = new Scanner(System.in);
    int count = 1;

    HashSet<Integer> list = new HashSet<>();
    while(sc.hasNextLine()) {
        while(sc.hasNextInt()) {
            list.add(sc.nextInt());
        }
        hset.put(count, new HashSet<>(list));
        count++;
        list.clear();
        sc.nextLine();
        if(sc.nextLine().equals("*")) {
            System.out.println("working");
            break;
        }
    }
    for(int i=0; i<count; i++){
        //some code goes here
        //if(hset.get(x) == hset.get(j)) or something along these lines
    }
}

//Sample Scanner input
1 2 3 4 5
10 9 8 7
5 4 3 2 1
1 1 1 1 1
1 2 3 5
1 2 3 6
6 4 2
2 4 6
4 2 6
4 6 2
6 2 4
1 3 2 4 5
15 14 13
5 3 2 1
79
7 9

//What I need the output to look like    
[7, 9]=1
[1]=1
[7, 8, 9, 10]=1
[13, 14, 15]=1
[1, 2, 3, 5]=2
[1, 2, 3, 6]=1
[2, 4, 6]=5
[1, 2, 3, 4, 5]=3
[79]=1

共 (2) 个答案

  1. # 1 楼答案

    在列表形式的列表中输入上述内容后,您可以按如下方式进行操作:

    List<List<Integer>> list = List.of(List.of(1, 2, 3, 4, 5),
            List.of(10, 9, 8, 7), List.of(5, 4, 3, 2, 1),
            List.of(1, 1, 1, 1, 1), List.of(1, 2, 3, 5),
            List.of(1, 2, 3, 6), List.of(6, 4, 2),
            List.of(2, 4, 6), List.of(4, 2, 6), List.of(4, 6, 2),
            List.of(6, 2, 4), List.of(1, 3, 2, 4, 5),
            List.of(15, 14, 13), List.of(5, 3, 2, 1), List.of(79),
            List.of(7, 9));
    
    • 由于计数将发生变化,我建议使用集合作为键,使用计数作为值。以后你可以把它们倒过来。还要注意的是,具有相同值的sets在不考虑顺序的情况下进行同等比较
    • 只需将列表流式处理并转换为一个集合。DUP将自动删除
    • 把它们放在Map<Set<Integer>, Long>
    • 仍然可以从控制台获取输入
    Map<Set<Integer>, Long> map = list.stream().map(lst->new HashSet<>(lst))
            .collect(Collectors.groupingBy(a->a,
                Collectors.counting()));
    

    印刷品

    [7, 9]=1
    [1]=1
    [7, 8, 9, 10]=1
    [13, 14, 15]=1
    [1, 2, 3, 5]=2
    [2, 4, 6]=5
    [1, 2, 3, 6]=1
    [79]=1
    [1, 2, 3, 4, 5]=3
     
    
  2. # 2 楼答案

    我会这样做:

    System.out.println("Type in your numbers followed by spaces and press enter");
    System.out.println("After every set entered type in any letter to enter more sets");
    System.out.println("Or enter * to finish");
    Scanner sc = new Scanner(System.in);
    
    Map<Set<Integer>, Integer> setCounts = new HashMap<>();
    do {
        if (sc.hasNextInt()) {
            Set<Integer> set = new TreeSet<>();
            do {
                set.add(sc.nextInt());
            } while (sc.hasNextInt());
            setCounts.compute(set, (key, count) -> count != null ? count + 1 : 1);
        }
    } while (sc.hasNext() && ! sc.next().equals("*"));
    setCounts.entrySet().forEach(System.out::println);
    

    问题中的数字,更改为适合打印说明

    1 2 3 4 5 x
    10 9 8 7 x
    5 4 3 2 1 x
    1 1 1 1 1 x
    1 2 3 5 x
    1 2 3 6 x
    6 4 2 x
    2 4 6 x
    4 2 6 x
    4 6 2 x
    6 2 4 x
    1 3 2 4 5 x
    15 14 13 x
    5 3 2 1 x
    79 x
    7 9 x
    *
    

    输出

    [7, 9]=1
    [1]=1
    [7, 8, 9, 10]=1
    [13, 14, 15]=1
    [1, 2, 3, 5]=2
    [2, 4, 6]=5
    [1, 2, 3, 6]=1
    [79]=1
    [1, 2, 3, 4, 5]=3