Java Iterator(迭代器)
Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
迭代器模式的定义:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节
1、迭代器 it 的两个基本操作是 next 、hasNext 和 remove。
- 调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
- 调用 it.hasNext() 用于检测集合中是否还有元素。
- 调用 it.remove() 将迭代器返回的元素删除。
2、Iterator 类位于 java.util 包中,使用前需要引入它,语法格式如下:
import java.util.Iterator; // 引入 Iterator 类
3、Iterator只用于遍历集合,本身并不提供承装对像的能力,如果需要创建Iterator对象,则必须有一个被迭代的集合。
4、集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
5、遍历:
-
方法一:
-
public class Test { public static void main(String[] args) { ArrayList<String> arr=new ArrayList<>(); arr.add("迭代器"); arr.add("添加"); arr.add(1,":"); Iterator<String> iterator = arr.iterator(); System.out.println(iterator.next()); System.out.println(iterator.next()); System.out.println(iterator.next()); //几个元素则有几个System.out.println //报异常:NoSuchElementException System.out.println(iterator.next()); } }
-
-
方法二:不推荐
-
public class Test { public static void main(String[] args) { ArrayList<String> arr=new ArrayList<>(); arr.add("迭代器"); arr.add("添加"); arr.add(1,":"); Iterator<String> iterator = arr.iterator(); for (int i=0;i<arr.size();i++){ System.out.println(iterator.next()); } } }
-
-
方法三:推荐,搭配使用
-
public class Test { public static void main(String[] args) { ArrayList<String> arr=new ArrayList<>(); arr.add("迭代器"); arr.add("添加"); arr.add(1,":"); Iterator<String> iterator = arr.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }
-
6、删除元素:
- 内部定义了remove(),可以在遍历的时候,删除集合中的元素,但是是遍历过程中通过迭代器对象的remove方法,不是集合对象的remove方法。
- 注意:如果还未调用next()或在上一次next方法之后已经调用了remove方法再调用remove都会报IllegalStateException
public class Test {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(12);
numbers.add(8);
numbers.add(2);
numbers.add(23);
Iterator<Integer> it = numbers.iterator();
while(it.hasNext()) {
Integer i = it.next();
if(i < 10) {
it.remove(); // 删除小于 10 的元素
}
}
System.out.println(numbers);
}
}