一、面试题 iterator
iterator() 、 Iterator() 、Iterable 区别
ArrayList类 —继承—>AbstractList抽象类—实现—>List接口—继承—>Collections接口—继承—>Iterable接口
Iterable接口中有iterable抽象方法,返回类型是 Iterator接口,这个接口里有两个常用的方法 next和hasNext
ArrayList类中有个叫 Itr 内部类,实现了 Iterable接口,重写iterator方法,返回 Ire 对象
- 为什么ArrayList继承了AbstractList抽象类还要实现List接口,因为作者承认自己写错了。
二、迭代器具体实现
hasNext 和 next
增强for也是用的迭代器
三、ListIterator迭代器
在cc后面添加kk
Iterator<String> it = list.iterator();
while(it.hasNext()){
if("cc".equals(it.next())){
list.add("kk");
}
}
看着没问题,但会报并发修改异常
出错原因:就是迭代器和list修改同时对集合进行操作
解决方法:两个操作让一个迭代器进行。
//在"cc"之后添加一个字符串"kk"
ListIterator<String> it = list.listIterator();
while(it.hasNext()){
if("cc".equals(it.next())){
list.add("kk");
}
}
ListIterator的两个判断方法:
- hasNext() 查看有没有下一个元素,正向遍历
- hasPrevious() 查看有没有上一个元素,逆向遍历