Python 官方文档:入门教程 => 点击学习
目录一、 Iterator迭代器接口1. 使用 Iterator 接口遍历集合元素2. Iterator接口的方法3. 迭代器的执行原理3.1 代码演示3.2 代码执行过程解析4.
⭕
GoF
给迭代器模式的定义为:提供一种方法访问一个容器(container
)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。类似于“公交车上的售票员”、“火车上的乘务员”、“空姐”。
⭕
Collection
接口继承了java.lang.Iterable
接口,该接口有一个iterator()
方法,那么所有实现了Collection
接口的集合类都有一个iterator()
方法,用以返回一个实现了Iterator
接口的对象。
⭕
Iterator
仅用于遍历集合,Iterator
本身并不提供承装对象的能力。如果需要创建Iterator
对象,则必须有一个被迭代的集合。
⭕集合对象每次调用
iterator()
方法都得到一个全新的迭代器对象,默认游标都在集合 的第一个元素之前。
注意:在调用
it.next()
方法之前必须要调用it.hasNext()
进行检测。若不调用,且下一条记录无效,直接调用it.next()
会抛出NoSuchElementException
异常。
//hasNext():判断是否还有下一个元素
while(iterator.hasNext()){
//next():①指针下移 ②将下移以后集合位置上的元素返回
System.out.println(iterator.next());
}
当执行
Iterator iterator = coll.iterator();
语句时,iterator
的指针此时执行下图的①所标的位置,然后执行iterator.hasNext()
语句,此时会去判断iterator
的指针指向的位置的下一个位置(即②)有无元素,若有,则返回true
,否则返回false
。当返回结果为true
时,则往下执行iterator.next()
语句,此时iterator
的指针下移并且把下移后的指针指向的集合位置上的元素返回。
Iterator iter = coll.iterator();//回到起点
while(iter.hasNext()){
Object obj = iter.next();
if(obj.equals("Tom")){
iter.remove();
} }
⭕
Iterator
可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove
方法,不是集合对象的remove
方法。
⭕ 如果还未调用
next()
或在上一次调用next()
方法之后已经调用了remove
方法,再调用remove
都会报IllegalStateException
异常。
@Test
public void test1(){
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("Tom"));
coll.add(false);
Iterator iterator = coll.iterator();
//方式一:
// System.out.println(iterator.next());
// //报异常:NoSuchElementException
//方式二:不推荐
// for(int i = 0;i < coll.size();i++){
// System.out.println(iterator.next());
// }
//方式三:推荐
hasNext():判断是否还有下一个元素
while(iterator.hasNext()){
//next():①指针下移 ②将下移以后集合位置上的元素返回
System.out.println(iterator.next());
}
}
@Test
public void test2(){
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("Tom"));
coll.add(false);
//错误方式一:
// Iterator iterator = coll.iterator();
// while((iterator.next()) != null){
// System.out.println(iterator.next());
// }
//错误方式二:
//集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
while (coll.iterator().hasNext()){
System.out.println(coll.iterator().next());
}
}
//测试Iterator中的remove()
//如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法,
// 再调用remove都会报IllegalStateException。
@Test
public void test3(){
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("Tom"));
coll.add(false);
//删除集合中"Tom"
Iterator iterator = coll.iterator();
while (iterator.hasNext()){
// iterator.remove();
Object obj = iterator.next();
if("Tom".equals(obj)){
iterator.remove();
// iterator.remove();
}
}
//遍历集合
iterator = coll.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
⭕
Java 5.0
提供了foreach
循环迭代访问Collection
和数组。
⭕ 遍历操作不需获取
Collection
或数组的长度,无需使用索引访问元素。
⭕ 遍历集合的底层调用
Iterator
完成操作。
⭕
foreach
还可以用来遍历数组。
@Test
public void test1(){
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("Tom"));
coll.add(false);
//for(集合元素的类型 局部变量 : 集合对象)
//内部仍然调用了迭代器。
for(Object obj : coll){
System.out.println(obj);
}
//123
//456
//Person@621be5d1
//Tom
//false
}
@Test
public void test2(){
int[] arr = new int[]{1,2,3,4,5,6};
//for(数组元素的类型 局部变量 : 数组对象)
for(int i : arr){
System.out.println(i);
}
//1
//2
//3
//4
//5
//6
}
public class test {
public static void main(String[] args) {
String[] str = new String[5];
for (String myStr : str) {
myStr = "小老师ir";
System.out.println(myStr);
}
//小老师ir
//小老师ir
//小老师ir
//小老师ir
//小老师ir
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);
}
//null
//null
//null
//null
//null
}
}
到此这篇关于Java-Iterator迭代器与foreach循环的文章就介绍到这了,更多相关Java Iterator迭代器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: JavaIterator迭代器与foreach循环代码解析
本文链接: https://www.lsjlt.com/news/147495.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0