我在eclipse IDE上使用并发HashMap,并且遇到了这样一个事实,即在更改并发HashMap的键时,我的输出也会发生变化。
案例I:
public static void main(String[] args) {
ConcurrentHashMap<String, String> concurrentHashMap= new ConcurrentHashMap<String, String>();
concurrentHashMap.put("Fav Rap", "Eminem");
concurrentHashMap.put("Fav Food", "Pizza");
concurrentHashMap.put("Pop", "Jackson");
for(Map.Entry<String, String> entry : concurrentHashMap.entrySet()){
concurrentHashMap.put("Fav Game", "Fifa");
concurrentHashMap.put("student", "smith");
System.out.println("Key : "+entry.getKey()+", Value : "+entry.getValue()+" hashcode: "+entry.hashCode()+" size: "+concurrentHashMap.size());
}
}
输出结果为:
Key:Pop,Value:Jackson hashcode:-172386558 size:5
Key:Fav Rap,价值:Eminem哈希码:1491542025大小:5
Key:student,Value:smith hashcode:-1988544968 size:5
Key:Fav Game,Value:Fifa hashcode:1043213001 size:5
Key:Fav Food,Value:Pizza hashcode:983035627 size:5
案例II:
public static void main(String[] args) {
ConcurrentHashMap<String, String> concurrentHashMap= new ConcurrentHashMap<String, String>();
concurrentHashMap.put("Fav1 Rap", "Eminem");
concurrentHashMap.put("Fav Food", "Pizza");
concurrentHashMap.put("Pop", "Jackson");
for(Map.Entry<String, String> entry : concurrentHashMap.entrySet()){
concurrentHashMap.put("Fav Game", "Fifa");
concurrentHashMap.put("student", "smith");
System.out.println("Key : "+entry.getKey()+", Value : "+entry.getValue()+" hashcode: "+entry.hashCode()+" size: "+concurrentHashMap.size());
}
}
输出结果为:
Key:Pop,Value:Jackson hashcode:-172386558 size:5
Key:Fav1 Rap,价值:Eminem哈希码:1157829666大小:5
Key:Fav Food,Value:Pizza hashcode:983035627 size:5
我刚刚将地图的第一个键从Fav更改为Fav1,输出也发生了变化。 你能澄清一下我的疑问吗?在此先感谢:)
答案 0 :(得分:2)
这是并发哈希映射的工作方式。如果你看一下添加所有值后输出会是相同的。在迭代时,您在其中添加项,根据迭代器中的对象引用,案例行为会有所不同。
答案 1 :(得分:0)
ConcurrentHashMap中的检索操作(包括get)不会阻止,因此可能重叠更新操作(包括put(,如你的情况)和删除)。
答案 2 :(得分:0)
我认为你应该尝试重新编译你的项目。因为我在IDE中尝试了你的代码。它运作良好。它给了我5个输出,就像在案例I中一样。当我将Fav Rap改为Fav1 Rap时,我输出了。
Key : Fav Food, Value : Pizza hashcode: 983035627 size: 5
Key : Pop, Value : Jackson hashcode: -172386558 size: 5
Key : Fav1 Rap, Value : Eminem hashcode: 1157829666 size: 5
Key : Fav Game, Value : Fifa hashcode: 1043213001 size: 5
Key : student, Value : smith hashcode: -1988544968 size: 5