Java迭代器(Iterator)是 Java 集合框架中的一种机制,它提供了一种在不暴露集合内部实现的情况下遍历集合元素的方法。Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合
获取迭代器对象
Iterator<类型> it=list.iterator();
迭代器方法
it.hasNext();判断检查迭代器中是否还有下一个元素,如果有则返回true,没有则返回false
in.next();返回当前指针所指位置的元素,并让指针向指向后面一位元素
it.remove()。用迭代器的删除方法。不能用集合的删除方法。
遍历注意要点
当迭代器遍历完所有元素后,再次调用next()方法强行获取元素,将引发NoSuchElementException异常。
迭代器遍历完成后,指针不会复位。
在每一次循环过程中确保使用一次next()方法, eg:调用多次,迭代器会跳过一些元素,导致遍历不完整。
在迭代器遍历时,不能用集合方法进行增加或删除。 eg:用来两个变量来分别记录被修改的次数和期望被修改的次数,当调用迭代器的方法时,两个值会同时改变,而调用集合方法时只会改变修改次数。
增强的for循环:Java提供了增强的for循环(也称为foreach循环),可以方便地遍历集合中的元素。使用增强的for循环时,不需要显式地使用迭代器,编译器会自动处理迭代器的创建和遍历。
代码示例
public class IteratorExample {
public static void main(String[] args) {
// 创建一个包含整数的集合
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
// 获取迭代器对象
Iterator<Integer> iterator = numbers.iterator();
// 使用迭代器遍历集合
while (iterator.hasNext()) {//判断迭代器内是否还有没被遍历的元素
int number = iterator.next();//获取下一个元素
System.out.println(number);
// 使用迭代器的remove()方法删除元素
if (number % 2 == 0) {
iterator.remove(); //注意要用迭代器自带的删除方法!!!
}
}
// 输出修改后的集合
System.out.println(numbers);
}
}
列表迭代器(ListIterator)比起普通迭代器多了个添加方法,可以在遍历过程中添加元素
public class ListIteratorExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("B")) {
iterator.add("D");
}
}
System.out.println(list);
}
}
//在这个例子中,我们创建了一个包含三个元素的ArrayList。然后,我们使用ListIterator遍历列表,
//并在元素“B”之后添加一个新元素“D”。最后,我们打印出修改后的列表,它包含四个元素“A”、“B”、“D”和“C”。