王争《设计模式之美》学习笔记
问题描述
- 谓“快照”,指我们为容器创建迭代器的时候,相当于给容器拍了一张快照(Snapshot)。
- 之后即便我们增删容器中的元素,快照中的元素并不会做相应的改动。
- 而迭代器遍历的对象是快照而非容器,这样就避免了在使用迭代器遍历的过程中,增删容器中的元素,导致的不可预期的结果或者报错。
- 容器list 中初始存储了3、8、2三个元素。尽管在创建迭代器iter1 之后,容器list 删除了元素3,只剩下8、2两个元素,但是,通过iter1 遍历的对象是快照,而非容器list 本身。所以,遍历的结果仍然是3、8、2。同理,iter2、iter3 也是在各自的快照上遍历。
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(8);
list.add(2)