为什么迭代器会打印不同的输出(与故障保护相关)?

时间:2017-01-06 20:00:18

标签: java iterator

为什么迭代器会输出不同的输出(与故障保护相关)?

public class failSafe {

 public static void main(String[] args) {

  Map<Integer,Integer> student = new ConcurrentHashMap<>();
    //Defining a new HashMap
     student.put(3, 5);
     student.put(2,10);
     Iterator<Integer> itr = student.keySet().iterator();

  while(itr.hasNext()){
       System.out.println(student.get(itr.next()));
       //student.put(4,40); will print 40 also
       student.put(1,89);
      //will not print 89.
   }

`` }

}

1 个答案:

答案 0 :(得分:3)

ConcurrentHashMap的迭代器不是故障安全的。它是weakly consistent。它保证在元素创建时作为Javadocs状态对元素的快照进行操作:

  

类似地,Iterators,Spliterators和Enumerations在迭代器/枚举的创建时或之后的某个时刻返回反映哈希表状态的元素。

它不保证在创建后反映新添加的元素。