首页 > 编程笔记 > Java笔记 阅读:17

Java遍历集合的3种方法(附带实例)

遍历集合是进行 Java 程序开发时使用频率最高同时也是最重要的操作,本节将对遍历 Collection 集合的方式展开讲解。

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

程序中使用 Iterator 迭代器来遍历 ArrayList 集合。通过调用集合对象的 iterator() 方法获得迭代器对象,然后调用迭代器的 hasNext() 方法判断集合中是否有下一个元素,如果有则 hasNext() 会返回 true,此时通过 next() 方法可以取出集合中的下一个元素。

需要注意的是,通过 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

程序中首先创建了一个集合对象,添加 3 条数据。然后使用 foreach 循环遍历集合,每次循环时 foreach 都通过临时变量 object 存储当前遍历到的元素,并将元素打印输出。最终将集合中的所有元素都遍历一遍。这种通过 foreach 遍历集合的方式和之前遍历数组的方式基本一致。

同样需要注意的是,在遍历集合元素的过程中,不能修改元素的数据,前文已经演示过这种情况,这里不再赘述。

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

程序中首先创建了一个集合对象,添加 3 条数据。然后通过调用集合对象的 forEach() 方法,并传入一个 Lambda 表达式进行集合遍历。

在遍历集合的时候,forEach() 方法会自动将集合中的所有元素逐一传给 Lambda 表达式的形参 c,接着程序会执行 Lambda 的表达式的代码块,将元素打印输出,最终完成集合元素的遍历。

相关文章