Iterator
-
迭代器接口,提供遍历所有Collection的接口
-
hasNext():如果迭代器中还有元素,则返回true。
-
next():返回迭代器中的下一个元素
-
remove():删除迭代器新返回的元素。
每调用一次next()方法,remove()方法只能被调用一次,如果违反这个规则将抛出一个异常。
Iterator在遍历过程中使用了锁定,Iterator.remove()是唯一安全的方式来在迭代过程中修改集合;如果在迭代过程中以任何其它的方式修改了基本集合将会产生未知的行为。ArrayList<String> arr = new ArrayList<String>("a","b","c"); Iterator<String> it = arr.iterator(); while (it.hasNext()) { String t = it.next(); if ("b".equals(t)) { it.remove(); }
Collection接口有迭代器方法,其实现类都有Iterator()。
如果遍历的是Map,那么用Map的entrySet()方法获得Set<Entry<K, V>>,通过Set来获取迭代器。
ListIterator
-
继承于Iterator接口,只能用于各种List类型的访问。
-
listIterator()方法产生一个指向List开始处的ListIterator,listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。
-
除了hasNext()、next()、remove(),还有:
- add():在next()方法返回的元素之前或previous()方法返回的元素之后插入一个元素
- hasPrevious():前面是否有元素
- nextIndex():下一个元素的索引
- previous():前一个元素
- previousIndex():前一个元素的索引
- set():修改访问的最后一个元素
-
ListIterator可以双向遍历、添加元素、修改元素、获取索引。