java - 使用迭代器循环遍历 HashMap 不会因 if 条件而停止

标签 java if-statement while-loop hashmap iterator

一个HashMap<Integer, Integer>有 10 个条目,但我只想打印 3 个条目。

代码:

HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();
hm.put(2, 1);
hm.put(5, 3);
hm.put(7, 2);
hm.put(4, 1);
hm.put(6, 3);
hm.put(8, 2);
hm.put(9, 1);
hm.put(3, 3);
hm.put(1, 2);       
hm.put(0, 2);
Iterator <Map.Entry<Integer, Integer>> itr = hm.entrySet().iterator();
int n=4;
int i=0;
while(itr.hasNext()){
    if(i<n){
        Map.Entry<Integer, Integer> entry = itr.next();
        System.out.println(entry.getKey()+" repeated "+entry.getValue());
    }
    i++;
}

输出

0 repeated 2
1 repeated 2
2 repeated 1
3 repeated 3 //program will wait for 2 or 3 seconds here
4 repeated 1
5 repeated 3
6 repeated 3
7 repeated 2
8 repeated 2
9 repeated 1

预期输出:

0 repeated 2
1 repeated 2
2 repeated 1
3 repeated 3

为什么 while 循环中的 if 条件不起作用?

最佳答案

你一次都不会退出循环 i变为 4。此外,您不会像 itr.next() 一样使用/读取迭代器中的后续元素。位于 if block 内。所以,它不断增加i直到溢出到Integer.MIN_VALUE (-2147483648)这需要几秒钟(您已经观察到)。

此时 if block 的条件变为 true ( i < n ),因此它开始打印迭代器中的其他元素。

您可以打印 i 的值看到这个。

System.out.println(entry.getKey()+" repeated "+entry.getValue() +". The value of i is: " + i);

打印,

0 repeated 2. The value of i is: 0
1 repeated 2. The value of i is: 1
2 repeated 1. The value of i is: 2
3 repeated 3. The value of i is: 3
4 repeated 1. The value of i is: -2147483648
5 repeated 3. The value of i is: -2147483647
6 repeated 3. The value of i is: -2147483646
7 repeated 2. The value of i is: -2147483645
8 repeated 2. The value of i is: -2147483644
9 repeated 1. The value of i is: -2147483643

关于java - 使用迭代器循环遍历 HashMap 不会因 if 条件而停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77487761/

相关文章:

java - Java 中 LinkedList 元素与字符串的比较

java - 当按下 f11 时,如何使窗口全屏显示?

java - 从目录中删除文件

java - 为什么这个线程池不同时执行HTTP请求?

c - while 循环根据用户输入的整数进行倒计时

java while (scan.nextLine() != "$")

java - .contains 方法是否有所有大写字母的正则表达式?

java - Array.equals(...) 给出了不正确的结果

java - 检查不同对象的空值

javascript - 即使 if 语句为 true,else 条件也始终被执行