Iterator概述
如何判断当前迭代器的位置,及如何移动?
- java的迭代器是无法将随机访问的,也就是说不可以根据输入的数字来跳转到指定的位置,迭代器到达任何一个位置都需要经过next或者可能存在的previous方法实现,只能一个一个的移动。
- 是迭代器并不是指向一个元素的,而是指向元素之间的。迭代器初始化之后再0号元素之前,迭代到尾之后是在最后一个元素之后,期间任何一点都是指向两个元素之间的位置。每次调用迭代器之前通常都需要进行查询即使用hasNext方法确定是否已经迭代到尾,如果迭代到尾就返回false。如果已经迭代到尾还强行的运行next则会抛出异常。
如何对迭代的元素进行删除,及删除后的影响?
- 由于迭代器没有办法进行随机访问,因此如果需要删除元素也只能删除刚刚跳过的元素。这样也导致每次remove之前必定有一个next。如果连续进行两次remove则会抛出异常。因为并不知道删除的元素是哪一个。
如何防止多个迭代器之间的相互影响?
在使用迭代器的时候,如果一个迭代器正在迭代器另一个迭代器修改了元素这样可能会导致很严重的问题。java采用一个计数器来保证不会有两个迭代器同时修改这个对象,具体的部分等到实现来说明。通常来说如果迭代器在进行访问时,另一个迭代器结构性的修改了对象,则正在访问的迭代器会抛出异常。但是如果是多个迭代器只进行读操作就可以。当然也可以自定义的修改成多个读迭代器和一个写迭代器。这样可以提高访问速率。
Iterable
用于生成迭代器,因此对于需要迭代的集合需要提供一个生成迭代器的方法</