1.正向遍历集合
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("苹果");
fruits.add("香蕉");
fruits.add("橙子");
// 获取迭代器
Iterator<String> iterator = fruits.iterator();
// 使用迭代器遍历集合
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}
}
}
这部分代码定义了一个名为IteratorExample
的类,并在main
方法中进行了以下操作:
- 创建了一个
ArrayList
对象fruits
,用于存储水果的名称。 - 使用
add
方法将三个不同的水果名称("苹果"、"香蕉"和"橙子")添加到fruits
列表中。
这行代码获取了fruits
列表的迭代器。通过调用iterator()
方法,这个语句返回了一个Iterator
对象,它可以用于遍历fruits
列表中的元素。
这部分代码使用迭代器循环遍历fruits
列表。while
循环在迭代器还有下一个元素时执行,通过调用hasNext()
方法来判断是否还有下一个元素。如果有下一个元素,将使用next()
方法获取该元素,并将其存储在名为fruit
的字符串变量中。然后,使用System.out.println(fruit)
语句打印出水果的名称。
循环将重复执行,直到列表中的所有元素都被遍历完毕为止。
综上所述,这段代码演示了如何使用迭代器来遍历并打印一个列表中的元素。迭代器提供了一种简便的方式来遍历集合,无需关心集合内部的数据结构。
2.反向遍历集合:除了使用hasNext()
和next()
方法正向遍历集合元素外,还可以使用hasPrevious()
和previous()
方法反向遍历集合元素。这需要使用ListIterator
,它是Iterator
的子接口,用于支持双向遍历。
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class IteratorExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("苹果");
fruits.add("香蕉");
fruits.add("橙子");
// 获取列表的迭代器
ListIterator<String> iterator = fruits.listIterator(fruits.size());
// 反向遍历集合
while (iterator.hasPrevious()) {
String fruit = iterator.previous();
System.out.println(fruit);
}
}
}
3.删除元素:在遍历集合时,可以使用迭代器的remove()
方法删除当前遍历的元素,而不会引发并发修改异常。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("苹果");
fruits.add("香蕉");
fruits.add("橙子");
// 获取迭代器
Iterator<String> iterator = fruits.iterator();
// 遍历集合并删除指定元素
while (iterator.hasNext()) {
String fruit = iterator.next();
if (fruit.equals("香蕉")) {
iterator.remove(); // 删除元素
}
}
System.out.println(fruits); // 输出结果:[苹果, 橙子]
}
}
这段代码,首先,创建了一个名为fruits
的列表,并向其中添加了三个水果名称。
然后,通过fruits.iterator()
方法获取了列表的迭代器对象,用于遍历列表中的元素。
接下来,使用while
循环和iterator.hasNext()
方法来判断是否还有下一个元素。在循环内部,通过iterator.next()
方法获取下一个元素,并将其保存在fruit
变量中。
然后,使用fruit.equals("香蕉")
判断当前元素是否为"香蕉",如果是,则使用iterator.remove()
方法删除该元素。
最后,输出fruits
列表,可以看到"香蕉"已经被成功删除,输出结果为[苹果, 橙子]
。
需要注意的是,在使用迭代器遍历过程中,不能直接使用列表的remove()
方法进行删除操作,而是必须使用迭代器的remove()
方法。这是因为直接使用列表的remove()
方法会导致并发修改异常(ConcurrentModificationException)。
这段代码通过迭代器的remove()
方法可以在遍历过程中安全地删除列表中的元素。
3.遍历Map集合:使用entrySet()
方法可以获取Map集合的Set
视图,然后通过迭代器遍历其中的键值对。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class IteratorExample {
public static void main(String[] args) {
Map<String, Integer> studentScores = new HashMap<>();
studentScores.put("小明", 90);
studentScores.put("小红", 85);
studentScores.put("小刚", 95);
// 获取Map集合的迭代器
Iterator<Map.Entry<String, Integer>> iterator = studentScores.entrySet().iterator();
// 遍历Map集合并打印键值对
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
String name = entry.getKey();
int score = entry.getValue();
System.out.println(name + " 的分数:" + score);
}
}
}
首先,创建了一个名为studentScores
的HashMap对象,并向其中添加了三个学生的姓名和分数信息。
然后,通过studentScores.entrySet().iterator()
方法获取了Map集合的迭代器对象,用于遍历Map集合中的键值对。
接下来,使用while
循环和iterator.hasNext()
方法判断是否还有下一个键值对。在循环内部,通过iterator.next()
方法获取下一个键值对,并将其保存在entry
变量中。entry.getKey()
获取键(学生姓名),entry.getValue()
获取值(学生成绩)。
然后,将学生姓名和分数打印出来,可以看到每个学生的姓名和对应的分数。
需要注意的是,使用迭代器遍历Map集合时,需要使用Map.Entry
作为迭代器的泛型类型,进一步获取键和值。