A 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块中.因此,它一直递增i,直到溢出到Integer.MIN_VALUE(-2147483648),这需要几秒钟(您已经观察到了).

此时,if块的条件变为真(i < n),因此它开始打印来自迭代器的其他元素.

您可以打印值i以查看此结果.

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

fingerprint ,

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相关问答推荐

如何计算内循环的时间复杂度?

有关手动创建的包的问题

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

使用动态ID从json获取详细信息的Jolt规范

现场观看Android Studio中的变化

对运行在GraalVM-21上的JavaFX应用程序使用分代ZGC会警告不支持JVMCI,为什么?

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

相同的Java SerializedLambda为implMethodKind返回不同的结果

如何让JVM在SIGSEGV崩溃后快速退出?

SpringBoot Kafka自动配置-适用于SASL_PLAYTEXT的SSLBundle 包,带SCRAM-SHA-512

如何以编程方式保存workBench.xmi?

通过Java列表中的某些字段搜索值

寻找Thread.sky()方法的清晰度

AWS Java SDK v2.x中没有setObjectAcl方法

组合连接以从两个表返回数据

有没有办法在o(log(N))中以系统的方式将数组中的小块元素复制和移动到新增长的数组中的左侧?

用于Java的Visual Studio代码完成不起作用

如何使用带有可选参数的类生成器?

为什么Instant没有从UTC转换为PostgreSQL的时区?

@此处不能应用可为null的批注