为了账号安全,请及时绑定邮箱和手机立即绑定

使用迭代器循环遍历 Hashmap

使用迭代器循环遍历 Hashmap

动漫人物 2022-07-20 21:07:38
我正在尝试计算 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 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

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


您的迭代器必须在填充后创建。HashMap否则永远是空的


Iterator<Integer> itr = countermap.keySet().iterator(); <---- HERE

while (itr.hasNext()) {

    System.out.println(itr.next());

    mod = itr.next()% 2;

    result = result + mod;

}

此外,连续调用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


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信