0 java collections concurrenthashmap
第一次迭代: -
class ConcurrentHashMapBehaviour
{
public static void main(String[] args)
{
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
map.put("ONE", 1);
map.put("TWO", 2);
map.put("THREE", 3);
map.put("FOUR", 4);
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()){
String key = (String) it.next();
System.out.println(key+" : "+map.get(key));
map.put("SEVEN", 7);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
ONE : 1
FOUR : 4
TWO : 2
THREE : 3
SEVEN : 7
Run Code Online (Sandbox Code Playgroud)
更改密钥后的第二次迭代
class ConcurrentHashMapBehaviour
{
public static void main(String[] args)
{
ConcurrentHashMap<String, Integer> map = new
ConcurrentHashMap<String, Integer>();
map.put("ONE", 1);
map.put("TWO", 2);
map.put("THREE", 3);
map.put("FOUR", 4);
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()){
String key = (String) it.next();
System.out.println(key+" : "+map.get(key));
map.put("FIVE", 5);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
ONE : 1
FOUR : 4
TWO : 2
THREE : 3
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么第一次迭代包括SEVEN作为输出而不是第二次迭代中的FIVE?
Javadoc(我强调):
类似地,Iterators,Spliterators和Enumerations 在迭代器/枚举的创建时或之后的某个时刻返回反映哈希表状态的元素.
换句话说,迭代器可用的视图没有任何保证.创建后,它可能会或可能不会知道对地图的更改Iterator
.唯一的保证是
它们不会抛出ConcurrentModificationException.
归档时间: |
|
查看次数: |
58 次 |
最近记录: |