概述
Iterable接口是Java集合的顶级接口之一。Collection接口继承Iterable,所以Collection的所有子类也实现了Iterable接口。
在API中查看该接口:
在这里插入图片
实现了这个接口可以获得增强for循环的操作
再往下发现该接口只有一个方法:iterator
该方法的返回值是一个名为Iterator的接口,这个接口也被称为迭代器。
在API中查看这个接口的内容:
在这个接口下有三个方法:
方法hasNext():在迭代器底层其实是有一个指针指向容器内的元素,在未调用hasNext()之前,指针指向的是容器第一个元素的前一个位置。调用hasNext()方法时,如果该指针指向元素的下一个位置有元素存在, 则返回True,否则返回False。
方法next():返回指针指向的元素,并将指针下下移一个单位。
注意:如果指针指向最后一个元素,此时再调用next()会抛出异常NoSuchElementException
方法remove():从容器中移除元素。只有在调用next()后才能调用一次remove,调用后会把上面next返回的元素移除容器。
注意:迭代器在执行过程中不能对容器内的元素做增删操作(合法调用迭代器自带的remove除外),这样会使迭代器不合法,发生不可预知的后果。
对容器进行遍历有三种方式:
①普通for循环:通过下标获取元素
②使用迭代器:容器必须实现Iterator接口,在迭代器遍历过程中不能使用除迭代器自带的remove()方法对迭代器进行增删。
③增强for循环:底层使用迭代器实现,本质就是Iterator迭代器,所有在遍历过程中不能对容器进行增删操作。
示例:
public class test01 {
public static void main(String[] args) {
ArrayList array = new ArrayList();
array.add(1);
array.add(2);
array.add(3);
System.out.println(array); // [1, 2, 3]
//遍历容器的三种方法:
//方法1:普通for循环(根据下标获取元素)
System.out.println("========普通for循环========");
for (int i = 0; i < array.size() ; i++) {
System.out.println(array.get(i));
}
// 方法2:通过迭代器
System.out.println("===================迭代器======================");
Iterator iterator = array.iterator(); //调用iterator方法返回一个迭代器
while (iterator.hasNext()) {
Integer next = (Integer) iterator.next();
System.out.println(next);
}
//方法3:增强for循环
System.out.println("===========增强for循环================");
for (Object i : array) {
System.out.println(i);
}
// 方法2:remove()
System.out.println("===================迭代器remove()======================");
Iterator iterator1 = array.iterator(); //调用iterator方法返回一个迭代器
while (iterator1.hasNext()) {
Integer next = (Integer) iterator1.next();
if (next.equals(2)) {
iterator1.remove();
}
System.out.println(next);
}
System.out.println(array); //[1, 3]
}
}
运行结果:
[1, 2, 3]
========普通for循环========
1
2
3
===================迭代器======================
1
2
3
===========增强for循环================
1
2
3
===================迭代器======================
1
2
3
[1, 3]
扩展1:利用迭代器对容器元素进行修改
public class test02 {
public static void main(String[] args) {
ArrayList arr = new ArrayList();
people p1 = new people("关羽", 10);
people p2 = new people("张飞", 11);
arr.add(p1);
arr.add(p2);
System.out.println(arr);
Iterator iterator = arr.iterator();
while (iterator.hasNext()) {
people next = (people) iterator.next();
if (next.name.equals("关羽")) {
next.name = "刘备";
}
System.out.println(next);
}
System.out.println(arr);
}
}
class people{
String name;
int age;
public people(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "people{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
结果:
[people{name='关羽', age=10}, people{name='张飞', age=11}]
people{name='刘备', age=10}
people{name='张飞', age=11}
[people{name='刘备', age=10}, people{name='张飞', age=11}]
扩展2:增强for循环与迭代器
//方法3:增强for循环
System.out.println("===========增强for循环================");
for (Object i : array) {
System.out.println(i);
}
对上面代码进行反编译:
System.out.println("===========增强for循环================");
for (Integer next = array.iterator(); next.hasNext(); ) {
Object i = next.next();
System.out.println(i);
}
可以看到增强for循环底层就是利用迭代器实现的…
最后
以上就是羞涩龙猫为你收集整理的java中的Iterator迭代器的全部内容,希望文章能够帮你解决java中的Iterator迭代器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复