Java遍历集合的3种方法(附带实例)
遍历集合是进行 Java 程序开发时使用频率最高同时也是最重要的操作,本节将对遍历 Collection 集合的方式展开讲解。
Java 中有一个专门用于遍历集合的接口——Iterator,该接口中定义了迭代访问 Collection 中元素的方法,因此 Iterator 接口也被称为迭代器。
Iterator 遍历对象主要使用两个方法:hasNext() 和 next(),使用 hasNext() 方法可以判断集合中是否有下一个元素,使用 next() 可以取出集合的下一个元素。调用 Collection 接口的 iterator() 方法能返回该集合的迭代器对象,通过这个迭代器对象就可以方便快捷地遍历对应的集合。
Iterator 遍历集合的方式如下图所示:

图 1 Iterator 遍历集合
在图 1 中,Iterator 在遍历集合中的元素时,它内部的指针开始会指向到第1个元素之前的位置,通过调用 next() 方法,Iterator 的指针会后移一位,读取下一个元素。当指针指向最后一个元素之后的位置时,调用 hasNext() 方法会返回 false,说明所有元素已经遍历完毕。
接下来,通过案例来演示如何使用 Iterator 遍历集合:
需要注意的是,通过 next() 方法获取元素之前,必须调用 hasNext() 方法检测集合中是否存在元素,如果元素不存在,此时使用 next() 方法取元素则会抛出 NoSuchElementException 异常。
Iterator 主要针对集合进行遍历,使用 Iterator 遍历集合时,每次获取元素前都需要先通过 hasNext() 方法判断集合中是否有下一个元素,如果有才能调用 next() 方法来取出元素。
在 Iterator 第 1 次调用 next() 方法时,Iterator 迭代器游标指向的是第 1 个元素之前的位置,实际上此时并没有指向任何元素,当第 1 次调用 next() 方法后,迭代器的游标会后移一位,指向到集合中的第 1 个元素并会将该元素返回。通过循环调用 next() 方法,就能将集合中的元素都遍历一遍。当 hashNext() 方法返回 false 时,则说明迭代器游标指向到了集合末尾,此时需要停止遍历。
接下来,通过案例来演示使用 foreach 循环遍历集合:
同样需要注意的是,在遍历集合元素的过程中,不能修改元素的数据,前文已经演示过这种情况,这里不再赘述。
另外,Iterable 接口是 Collection 集合接口的父接口,所以 Collection 集合的实现类都可以直接调用该方法,通过传入一个 Lambda 表达式来完成集合元素遍历。
接下来,通过案例来演示通过调用集合的 forEach(Consumer action) 方法并传入 Lambda 表达式来遍历集合元素:
在遍历集合的时候,forEach() 方法会自动将集合中的所有元素逐一传给 Lambda 表达式的形参 c,接着程序会执行 Lambda 的表达式的代码块,将元素打印输出,最终完成集合元素的遍历。
Java Iterator遍历集合
使用集合时,除了要对元素做添加、删除、修改操作,更多的时候需要遍历集合中的所有元素。Java 中有一个专门用于遍历集合的接口——Iterator,该接口中定义了迭代访问 Collection 中元素的方法,因此 Iterator 接口也被称为迭代器。
Iterator 遍历对象主要使用两个方法:hasNext() 和 next(),使用 hasNext() 方法可以判断集合中是否有下一个元素,使用 next() 可以取出集合的下一个元素。调用 Collection 接口的 iterator() 方法能返回该集合的迭代器对象,通过这个迭代器对象就可以方便快捷地遍历对应的集合。
Iterator 遍历集合的方式如下图所示:

图 1 Iterator 遍历集合
在图 1 中,Iterator 在遍历集合中的元素时,它内部的指针开始会指向到第1个元素之前的位置,通过调用 next() 方法,Iterator 的指针会后移一位,读取下一个元素。当指针指向最后一个元素之后的位置时,调用 hasNext() 方法会返回 false,说明所有元素已经遍历完毕。
接下来,通过案例来演示如何使用 Iterator 遍历集合:
import java.util.*; public class Demo { public static void main(String[] args) { Collection coll = new ArrayList(); // 创建集合 coll.add("Bugatti"); coll.add("Porsche"); coll.add("Lamborghini"); Iterator i = coll.iterator(); // 获取Iterator对象 while (i.hasNext()) { System.out.println(i.next()); // 判断集合中是否存在下一个元素 // 打印集合中的元素 } } }程序运行结果如下:
Bugatti
Porsche
Lamborghini
需要注意的是,通过 next() 方法获取元素之前,必须调用 hasNext() 方法检测集合中是否存在元素,如果元素不存在,此时使用 next() 方法取元素则会抛出 NoSuchElementException 异常。
Iterator 主要针对集合进行遍历,使用 Iterator 遍历集合时,每次获取元素前都需要先通过 hasNext() 方法判断集合中是否有下一个元素,如果有才能调用 next() 方法来取出元素。
在 Iterator 第 1 次调用 next() 方法时,Iterator 迭代器游标指向的是第 1 个元素之前的位置,实际上此时并没有指向任何元素,当第 1 次调用 next() 方法后,迭代器的游标会后移一位,指向到集合中的第 1 个元素并会将该元素返回。通过循环调用 next() 方法,就能将集合中的元素都遍历一遍。当 hashNext() 方法返回 false 时,则说明迭代器游标指向到了集合末尾,此时需要停止遍历。
Java foreach循环遍历集合
foreach 循环不仅能遍历数组,它也可以遍历集合。接下来,通过案例来演示使用 foreach 循环遍历集合:
import java.util.*; public class Demo { public static void main(String[] args) { Collection cars = new ArrayList(); // 创建集合 cars.add("Bugatti"); // 向集合中添加元素 cars.add("Porsche"); cars.add("Lamborghini"); for (Object object : cars) { // 用 foreach 遍历集合中元素 System.out.println(object ); // 打印集合中取出来的每个元素 } } }程序的运行结果如下:
Bugatti
Porsche
Lamborghini
同样需要注意的是,在遍历集合元素的过程中,不能修改元素的数据,前文已经演示过这种情况,这里不再赘述。
Java forEach遍历集合
在 Java 8 中,Iterable 接口新增了一个可以遍历集合的默认方法:forEach(Consumer action)。这个方法的参数类型(Consumer)是一个函数式接口,所以它可以接收一个 Lambda 表达式作为参数。另外,Iterable 接口是 Collection 集合接口的父接口,所以 Collection 集合的实现类都可以直接调用该方法,通过传入一个 Lambda 表达式来完成集合元素遍历。
接下来,通过案例来演示通过调用集合的 forEach(Consumer action) 方法并传入 Lambda 表达式来遍历集合元素:
import java.util.ArrayList; import java.util.Collection; public class Demo { public static void main(String[] args) { Collection cars = new ArrayList(); // 创建集合 cars.add("Bugatti"); // 向集合中添加元素 cars.add("Porsche"); cars.add("Lamborghini"); cars.forEach(c->System.out.println(c)); // 调用 forEach() 方法遍历集合 } }程序的运行结果如下:
Bugatti
Porsche
Lamborghini
在遍历集合的时候,forEach() 方法会自动将集合中的所有元素逐一传给 Lambda 表达式的形参 c,接着程序会执行 Lambda 的表达式的代码块,将元素打印输出,最终完成集合元素的遍历。