我是靠谱客的博主 痴情便当,这篇文章主要介绍Day45.迭代器Iterator接口的使用 -Java常用类、集合#、IO使用Iterator接口的遍历Collection集合元素Iterator迭代器的执行原理迭代器Iterator遍历集合元素的两种错误写法Iterator接口的remove()方法的使用,现在分享给大家,希望可以做个参考。
使用Iterator接口的遍历Collection集合元素
.
- Iterator对象成为的迭代(设计模式的一种),主要用于 遍历Collection 集合中的元素。
- GOF给迭代器模式的定义为: 提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。 迭代器模式,就是为容器而生。类似于"公交车上的售票员"、“火车上的乘务员”、“空姐”。
- Collection接口继承了java.lang.Iterator接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。
- Iterator仅用于遍历集合,Iterator本身并不提供承装对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合。
- 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
//集合元素的遍历操作,使用迭代器Iterator接口
//1. 内部方法: hasNext()和 Next()
//2. 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,
// 默认游标都在集合的第一个元素之前。
//3. Iterator迭代器内部定义了remove()方法,可以在遍历的时候,删除集合中的元素。此方法不同于集合直接调用remove()。
public class iteratorTest {
@Test
public void test1(){
Collection coll = new ArrayList();
coll.add(1458);
coll.add(123);
coll.add(new Person("PePe",21));
coll.add(new String("Tom"));
Iterator iterator = coll.iterator();
//方式一:
// System.out.println(iterator.next());//1458
// System.out.println(iterator.next());//123
// System.out.println(iterator.next());//Person{name='PePe', age=21}
// System.out.println(iterator.next());//Tom
// //报错NoSuchElementException
// System.out.println(iterator.next());
//方式二: 不推荐
/* for (int i = 0; i < coll.size(); i++) {
System.out.println(iterator.next()); //1458
//123
//Person{name='PePe', age=21}
//Tom
}
*/
//方式三: *推荐
//hasNext(): 判断是否还有下一个元素
while (iterator.hasNext()){
//next(): ①指针下移 ②将下移以后集合位置上的元素返回
System.out.println(iterator.next());
}
}
}
.
Iterator迭代器的执行原理
.
.
迭代器Iterator遍历集合元素的两种错误写法
.
public void test2(){
Collection coll = new ArrayList();
coll.add(1458);
coll.add(123);
coll.add(new Person("PePe",21));
coll.add(new String("Tom"));
Iterator iterator = coll.iterator();
//错误方式一: 跳着输出
// while ((iterator.next() != null)){
// System.out.println(iterator.next()); //123 报错NoSuchElementException
// // Tom
//错误方式二: 一直重复输出第一个元素
//每次调用iterator()方法都得到一个全新的迭代器对象
while (coll.iterator().hasNext()){
System.out.println(coll.iterator().next());//1458 1458 1458 1458 重复输出
}
}
.
Iterator接口的remove()方法的使用
.
//测试Iterator中的remove()方法
//如果还未调用next() 或 在一次调用next()方法之前调用了多次remove方法---->就会报错IllegalStateException
@Test
public void test3(){
Collection coll = new ArrayList();
coll.add(1458);
coll.add(123);
coll.add(new Person("PePe",21));
coll.add(new String("Tom"));
//删除集合中"Tom"数据
Iterator iterator = coll.iterator();
while (iterator.hasNext()){
// iterator.remove();//报错IllegalStateException
//不要在没next()之前调用remove()方法
Object obj = iterator.next();
if ("Tom".equals(obj)){
iterator.remove();
// iterator.remove();//报错IllegalStateException
//在下一次next()之前不能调用两次remove()
}
}
//遍历集合
Iterator iterator1 = coll.iterator();
while (iterator1.hasNext()){
System.out.println(iterator1.next());
/*
1458
123
Person{name='PePe', age=21}
*/
}
}
最后
以上就是痴情便当最近收集整理的关于Day45.迭代器Iterator接口的使用 -Java常用类、集合#、IO使用Iterator接口的遍历Collection集合元素Iterator迭代器的执行原理迭代器Iterator遍历集合元素的两种错误写法Iterator接口的remove()方法的使用的全部内容,更多相关Day45.迭代器Iterator接口的使用内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复