【发布时间】:2017-03-22 07:10:46
【问题描述】:
我在 Eclipse IDE 上使用并发 HashMap,发现在更改并发 HashMap 的键时,我的输出也发生了变化。
案例一:
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());
}
}
输出是:
键:流行,值:杰克逊哈希码:-172386558 大小:5
键:Fav Rap,值:Eminem 哈希码:1491542025 大小:5
键:学生,值:smith 哈希码:-1988544968 大小:5
键:最喜欢的游戏,值:FIFA 哈希码:1043213001 大小:5
键:最喜欢的食物,值:披萨哈希码:983035627 大小:5
案例二:
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());
}
}
输出是:
键:流行,值:杰克逊哈希码:-172386558 大小:5
键:Fav1 Rap,值:Eminem 哈希码:1157829666 大小:5
键:最喜欢的食物,值:披萨哈希码:983035627 大小:5
我刚刚将地图的第一个键从 Fav 更改为 Fav1 并且输出发生了变化。 你能澄清我的疑问吗?在此先感谢:)
【问题讨论】:
-
因为 fav rap 和 fav1 rap 是不同的对象。这就是为什么即使您只是更改了键的名称,它仍然会创建一个新对象 fav1 rap
-
我没有看到代码中当前条目的键有任何变化。您基本上只是在地图中添加了 2 个条目。
-
@Mr.Aw 我同意它将创建一个 Fav1 说唱的新对象。但是其他两个条目,即 Fav Game 和 student 会发生什么。虽然列表的大小似乎是 5,但显示的数据数量是 3。希望您理解我的担忧。
-
@imprezzeb 如果你敏锐地看到案例 II 我正在将密钥从 Fav Rap(案例 I)更改为 Fav1 Rap(案例 II)。行。所以现在我同意它为 Fav1 Rap 创建了一个新对象。但是在显示为什么它只打印 3 个值时,尽管在第二种情况下大小似乎是 5。希望你能理解我的担忧。
-
@SumeetBarua 我以为你刚刚展示了 3 让我们看到哈希码的变化。我试过你的代码。我还尝试将第一个键从 Fav 更改为 Fav1。但是输出对我来说并没有改变。它仍然给了我 5 个输出
标签: java eclipse collections concurrenthashmap