java.util.HashMap----看控制台,为什么打印顺序是这样的

qinghua

今天我研究从 java.util.HashMap 中删除特殊对象。我测试了错误的语法。但是我遇到了一个奇妙的问题。控制台上的消息不按顺序。异常消息以错误的顺序打印。该程序似乎使用多线程执行。以下是我的代码。

package com.study.iter;

import java.util.HashMap;
import java.util.Map;

public class TestRmObjFromMap {

    public static void main(String[] args) {

        Map<String, Integer> map = new HashMap();

        map.put("1", 1);
        map.put("2", 2);
        map.put("3", 3);
        map.put("4", 4);

        remove1(map);
    }

    private static void remove1(Map<String, Integer> map) {

        for(Map.Entry<String, Integer> entry : map.entrySet()) {

            if(entry.getKey().equals("3")) {
                map.remove(entry.getKey());
            }
            else {
                System.out.println("key: " + entry.getKey() + " -- value: " + entry.getValue());
            }

        }

    }

}

运行此代码后,它会打印以下内容:

Exception in thread "main" java.util.ConcurrentModificationException
key: 1 -- value: 1
key: 2 -- value: 2
    at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)
    at java.util.HashMap$EntryIterator.next(HashMap.java:1471)
    at java.util.HashMap$EntryIterator.next(HashMap.java:1469)
    at com.study.iter.TestRmObjFromMap.remove1(TestRmObjFromMap.java:29)
    at com.study.iter.TestRmObjFromMap.main(TestRmObjFromMap.java:24)

为什么异常消息被其他消息分开。为什么不喜欢这个:

key: 1 -- value: 1
key: 2 -- value: 2
Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)
    at java.util.HashMap$EntryIterator.next(HashMap.java:1471)
    at java.util.HashMap$EntryIterator.next(HashMap.java:1469)
    at com.study.iter.TestRmObjFromMap.remove1(TestRmObjFromMap.java:29)
    at com.study.iter.TestRmObjFromMap.main(TestRmObjFromMap.java:24)

谁能告诉我原因?谢谢!

现在是一个简单的测试:

public static void main(String[] args) {

    for(int i=0;i<500;i++) {
        System.out.println("ttt");
        if(i==10) throw new ConcurrentModificationException();
    }

}

结果:

Exception in thread "main" java.util.ConcurrentModificationException
    ttt
    at com.study.iter.TestIter.main(TestIter.java:14)
    ttt
    ttt
    ttt
    ttt
    ttt
    ttt
    ttt
    ttt
    ttt
    ttt

原因:

 Exceptions will printed at stderr and System.out.println prints on stdout. Both streams are not sychronized

谢谢!

延斯

异常将在 stderrSystem.out.println打印在 stdout 上打印。两个流不同步

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android:像HashMap这样的Bundle Vs java.util集合之间有什么区别

java.util.hashMap中的init方法

的IntelliJ折旧预警的java.util.HashMap

java.util.Property与hashmap的性能方面

为什么'java.util.HashMap'中的成员字段'table'是瞬态的?

在java.util.HashMap中,为什么modcount不是布尔值?

这种设计有什么问题?重写或重载java.util.HashMap

java.util.HashMap 无法转换(android studio、firebase、java)

是什么导致java.util.HashSet和HashMap.keySet()类的iterator()的顺序有些不可预测?

转换科特林MutableMap到的java.util.HashMap

java.util.HashMap和HashSet的内部实现

PySpark会话中缺少java.util.HashMap

如何从Scala代码动态填充java.util.HashMap?

将java.util.Properties转换为HashMap <String,String>

调用java.util.HashMap.keySet()的费用是多少?

java.util.HashMap无法强制转换为Object

如何强制转换java.util.HashMap $ Node对象?

Xamarin.Android迭代Java.Util.HashMap

CompletionStage<java.util.HashMap> 是与 CompletionStage<java.util.Map> 不兼容的类型

Android java.util.hashmap无法转换为java.util.list

java.util.HashMap是否不能在Kotlin中实现java.util.Map吗?

不能将Rest Assured java.util.HashMap强制转换为类java.util.List

无法将java.util.HashMap强制转换为java.util.ArrayList

使用java.util.logging登录控制台

用Java打印HashMap

无法将 java.util.HashMap 类型的值转换为 String 但代码中没有 hashmap?

java.lang.ClassCastException:java.util.HashMap $ EntrySet无法转换为java.util.Map $ Entry

HashMap:java.lang.NullPointerException:尝试调用虚拟方法“java.lang.Object java.util.HashMap.put”

不java.util.HashMap.containsKey(对象键)执行违反java.util.Map.containsKey(对象键)的文件?