use*_*235 2 java iterator if-statement hashmap while-loop
AHashMap<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++;
}
Run Code Online (Sandbox Code Playgroud)
输出
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
Run Code Online (Sandbox Code Playgroud)
期望输出:
0 repeated 2
1 repeated 2
2 repeated 1
3 repeated 3
Run Code Online (Sandbox Code Playgroud)
为什么 while 循环中的 if 条件不起作用?
一旦变成 4,您就不会退出循环i。此外,您不会像ifitr.next()块内那样使用/读取迭代器中的后续元素。因此,它不断增加,直到溢出到(-2147483648),这需要几秒钟(您已经观察到)。iInteger.MIN_VALUE
此时if块的条件变为 true ( i < n),因此它开始打印迭代器中的其他元素。
您可以打印 的值i来查看这一点。
System.out.println(entry.getKey()+" repeated "+entry.getValue() +". The value of i is: " + i);
Run Code Online (Sandbox Code Playgroud)
印刷,
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
Run Code Online (Sandbox Code Playgroud)