1. Iterator迭代器
迭代器为容器而生,为容器服务,遍历容器里面的元素。迭代器提供了一种方法访问一个容器对象中的各个元素,而不需要暴露该对象的内部细节。类似于“公交车上的售票员”,“火车上的乘务员”。
Iterator仅仅用于遍历集合,迭代器Iterator本身并不具备承载对象的能力,如果需要创建Iterator对象,必须有一个被迭代的集合。集合对象每次调用iterator()方法都会得到一个全新的迭代器对象,默认的游标元素都在第一个元素之前。
迭代器的执行原理:
- 默认的游标对象指向的是第一个元素之前。
- hasNext()方法是boolean类型,判断是否有下一个元素,有的话返回true,游标移向下一个元素
- next(),指针往下移动,将下移后集合位置上的元素返回
Iterator接口的方法
2. 增强for循环
增强for循环结构:for(集合元素的类型 局部变量 : 集合对象)
取list集合中的第一个元素,赋值给s变量,然后输出
取list集合中的第二个元素,赋值给s变量,然后输出
......
直到调用的是最后一个元素。
内部还是调用的是迭代器
for(String s : list){
system.out.println(s);
}
现在我们看一看底层的源码:
第一层源码,发现底层还是迭代器,返回的是一个 迭代器对象
public Iterator<E> iterator() {
return new Itr();
}
现在我们继续跟进迭代器对象源码,发现是个next方法,里面使用的是cursor游标
public E next() {
checkForComodification();
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1;
return (E) elementData[lastRet = i];
}
3.总结
- 源码是最好的学习方式,可以看底层实现,这样知识点会掌握的更加扎实
- 看了这篇文章,基本上Iterator迭代器搞定,增强for循环底层实现搞定
- 如果觉得满意,给个赞呗。。