/**
* 迭代器
* Iterator
* Iterator()返回Iterator对象
* hasNext()判断当前集合是否含有下一个可迭代元素
* next()返回当前集合下一个可迭代元素
* 自定义迭代器的实现
* ArrayList种对迭代器的实现
* 1)modCount定义于abstraList,存储当前集合结构的修改次数
* 2)fast-fail机制
* ConcurrentModificationException() 使用迭代器遍历时如果调用集合的add/remove方法修改集合的结构则会抛出该异常
*
*
* non-fast-fail机制
* 课后练习1: copyOnWriteArrayList 如何实现非快速失败机制
* 课后练习2:Vector底层源码,主要看属性,构造函数,增删改查方法,明白Vector和ArrayList之间的区别
* 和联系(底层数据结构、效率、扩容机制、是否线程安全)
*/
public class TestDemo3 {
public static void main(String[] args) {
//String[] array=new String[]{"1","2","3","4","5"};
//MyIterator myIterator=new MyIterator(array);
//Iterator itr= myIterator.iterator();
//while (itr.hasNext()){
// System.out.println(itr.next());
// }
ArrayList<Integer>List=new ArrayList<>();
List.add(1) ;
List.add(5);
List.add(3);
List.add(23);
List.add(65);
List.add(22);
Iterator<Integer> itr= List.iterator();
while (itr.hasNext()){
System.out.println(itr.next());
//List.remove(3);//抛异常 迭代器在迭代的过程中,集合的结构不能发生改变
itr.remove();//正常运行;
}
System.out.println(List.toString());
}
}
class MyIterator<E> implements Iterable{
private E[] elements;//存放元素的容器
private int size; //存放元素的个数
public MyIterator(E[] elements){
this.elements = elements;
this.size = elements.length;
}
@Override
public Iterator iterator() {
return new Iterator() {
private int curror=-1;
@Override
public boolean hasNext() {//判断是否存在下一个元素
return curror+1<size;//指向下一个元素
}
@Override
public Object next() {//获取下一个元素
//移动一次
return elements[++curror];
}
};
}
}
迭代器
最新推荐文章于 2025-05-20 22:23:34 发布