使用Iterator循环遍历Hashmap

时间:2019-03-06 16:20:17

标签: java java-8 hashmap iterator

我正在尝试计算Java 8中哈希映射的所有值的mod的总和,但未按预期提供。以下是我编写的代码。

private static int FindPairs(int n,int[] ar) {
    Map<Integer, Integer> countermap=new HashMap<>();
    Iterator<Integer> itr=countermap.keySet().iterator();
    int result =0;
    for(int i=0;i<ar.length;i++) {
        if(countermap.containsKey(ar[i])) {
            countermap.put(ar[i], countermap.get(ar[i])+1);
        }
        else {
            countermap.put(ar[i], 1);
        }
    }
    int mod=0;

    while(itr.hasNext()) {
        System.out.println(itr.next());
        mod=itr.next()%2;
        result=result + mod;
    }
    System.out.println(Arrays.asList(countermap));
    return result;
}

输入:

ar = {1,2,3,4,5,6,1,3,4,5}

n = 7

输出:

[{1 = 2,2 = 1,3 = 2,4 = 2,5 = 2,6 = 1}]

0

1 个答案:

答案 0 :(得分:2)

我在您发布的代码中发现了两个问题

  1. 必须在HashMap填充后 创建您的迭代器。否则,它将始终为空

    Iterator<Integer> itr = countermap.keySet().iterator(); <---- HERE
    while (itr.hasNext()) {
        System.out.println(itr.next());
        mod = itr.next()% 2;
        result = result + mod;
    }
    
  2. 而且,连续两次调用itr.next()只会一直跳过一个。您应该调用一次,将其存储在变量中,然后根据需要使用两次

    Iterator<Integer> itr = countermap.keySet().iterator();
    while (itr.hasNext()) {               _
        Integer next = itr.next();         |
        System.out.println(next);           }<---- HERE
        mod = next % 2;                   _|
        result = result + mod;
    }
    

进行这些更改后,输出将变为以下

1
2
3
4
5
6
[{1=2, 2=1, 3=2, 4=2, 5=2, 6=1}]
3