遍历Java中的列表

这篇文章将讨论在 Java 中迭代列表的各种方法。

1.使用 List.toString() 方法

如果我们只是想显示列表的内容,我们可以通过使用 toString() 方法,然后简单地打印出来,如下图:

import java.util.List;

import java.util.ArrayList;

import java.util.stream.Stream;

class Main

{

    // 用于打印 `ArrayList` 的 Java 程序

    public static void main(String[] args)

    {

        List<String> list = new ArrayList<String>();

        list.add("C");

        list.add("C++");

        list.add("Java");

        // 1. 使用 `toString()` 打印列表的字符串表示

        System.out.println(list.toString());

        // 2. Java 8 方式!

        Stream.of(list.toString())

            .forEach(System.out::println);

    }

}

2.使用 ListIterator 或者 Iterator

这 List 接口提供了一个特殊的迭代器,称为 ListIterator,除了正常的操作之外,还允许双向访问 Iterator 接口提供。我们可以打电话 List.listIterator() 得到一个 ListIterator 列表中的元素。我们也可以使用 List.iterator() 返回一个 Iterator.

import java.util.ArrayList;

import java.util.List;

import java.util.Iterator;

import java.util.ListIterator;

import java.util.Arrays;

class Main

{

    // 遍历列表的 Java 程序

    public static void main(String[] args)

    {

        List<String> list = Arrays.asList("C", "C++", "Java");

        // 1. 使用 `ListIterator` 遍历列表

        ListIterator<String> lItr = list.listIterator();

        // 如果列表有更多元素,hasNext() 返回 true

        while (lItr.hasNext())

        {

            // next() 返回迭代中的下一个元素

            System.out.println(lItr.next());

        }

        // 2. 使用迭代器

        Iterator<String> itr = list.iterator();

        while (itr.hasNext()) {

            System.out.println(itr.next());

        }

    }

}

通用版本:

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

import java.util.ListIterator;

class Main

{

    // 在 Java 中遍历列表的通用代码

    public static <T, C> void IterateUsingIterator(List<T> list,

                                                Class<C> iteratorClass)

    {

        if (iteratorClass.getSimpleName().equals("ListIterator"))

        {

            // 使用 `ListIterator` 遍历列表

            ListIterator<T> lItr = list.listIterator();

            while (lItr.hasNext()) {

                System.out.println(lItr.next());

            }

        }

        else if (iteratorClass.getSimpleName().equals("Iterator"))

        {

            // 使用 `Iterator` 遍历列表

            Iterator<T> itr = list.iterator();

            while (itr.hasNext()) {

                System.out.println(itr.next());

            }

        }

    }

    // 遍历列表的 Java 程序

    public static void main(String[] args)

    {

        List<String> list = Arrays.asList("C", "C++", "Java");

        // 1. 使用 `ListIterator` 打印列表

        IterateUsingIterator(list, ListIterator.class);

        // 2. 使用 `Iterator` 打印列表

        IterateUsingIterator(list, Iterator.class);

    }

}

3.使用for循环/增强for循环

我们知道 list 是一个有序集合,因此我们可以使用 for 循环通过它们在列表中的索引来访问元素。

for 循环还有另一种形式,设计用于通过集合和数组进行迭代,称为增强型 for 循环。我们还可以使用增强的 for 循环来遍历列表。

import java.util.List;

import java.util.ArrayList;

import java.util.Arrays;

class Main

{

    // 遍历列表的 Java 程序

    public static void main(String[] args)

    {

        List<String> list = Arrays.asList("C", "C++", "Java");

        // 1. 使用for循环打印列表

        for (int i = 0; i < list.size(); i++) {

            System.out.println(list.get(i));

        }

        // 2. 使用增强的for循环打印列表

        for (String s: list) {

            System.out.println(s);

        }

    }

}

下载  运行代码

4. Java 8——使用流和 Lambda

在 Java 8 中,我们可以借助流、lambda 和 forEach 来循环列表。以下程序显示了 4 种方法:

import java.util.Arrays;

import java.util.List;

import java.util.stream.Stream;

class Main

{

    // 遍历列表的 Java 程序

    public static void main(String[] args)

    {

        List<String> list = Arrays.asList("C", "C++", "Java");

        // 1. 获取流并使用 lambda 表达式

        list.stream().forEach(S -> {

            System.out.println(S);

        });

        // 上面代码的简写

        list.stream().forEach(S -> System.out.println(S));

        // 2. 通过提供方法引用

        list.stream().forEach(System.out::println);

        // 3. List 从 `Iterable` 接口继承 `forEach()`

        list.forEach(System.out::println);

        // 4. 使用`Stream.of()`获取`Stream `

        Stream.of(list.toArray())

            .forEach(System.out::println);

    }

}

5. 将列表转换为数组

我们还可以使用将列表转换为数组 List.toArray(T[ ]) 方法,然后使用 for 循环遍历数组或使用打印它 Arrays.toString().还有其他几种实现 toArray() 方法,如下图:

import com.google.common.collect.FluentIterable;

import com.google.common.collect.Iterables;

import java.util.Arrays;

import java.util.List;

class Main

{

    // 遍历列表的 Java 程序

    public static void main(String[] args)

    {

        List<String> list = Arrays.asList("C", "C++", "Java");

        // 将列表转换为数组

        String[] array = null;

        // 1. 使用 `List.toArray(T[])` 方法

        array = list.toArray(new String[list.size()]);

        System.out.println(Arrays.toString(array));

        // 2. `List.toArray(T[])` – 不分配任何内存

        array = list.toArray(new String[0]);

        System.out.println(Arrays.toString(array));

        // 3. 使用 `List.toArray()` 方法

        System.out.println(Arrays.toString(list.toArray()));

        // 4. Java 8 – 流 + 方法引用

        array = list.stream().toArray(String[]::new);

        System.out.println(Arrays.toString(array));

        // 5. Java 8 – Streams + lambda 表达式

        array = list.stream().toArray(n -> new String[n]);

        System.out.println(Arrays.toString(array));

        // 6. 使用 Guava 库中的 `FluentIterable` 类

        array = FluentIterable.from(list).toArray(String.class);

        System.out.println(Arrays.toString(array));

        // 7. 使用 Guava 库中的 `Iterables` 类

        array = Iterables.toArray(list, String.class);

        System.out.println(Arrays.toString(array));

    }

}

6.使用 Enumeration 界面

最后,我们可以使用已弃用的 枚举 打印列表的界面。该接口提供了枚举向量元素的方法。因此,我们需要先将列表转换为 Vector,然后打印所有 Vector 元素。

import java.util.*;

class Main

{

    // 遍历列表的 Java 程序

    public static void main(String[] args)

    {

        List<String> list = Arrays.asList("C", "C++", "Java");

        // 1. 将 `List` 转换为 `Vector`

        @Deprecated

        Enumeration<String> enumeration = new Vector(list).elements();

        // 如果枚举包含更多元素

        while (enumeration.hasMoreElements())

        {

            // 打印枚举的下一个元素

            System.out.println(enumeration.nextElement());

        }

        // 2. `Collections.enumeration()` 返回一个枚举

        // 指定集合

        enumeration = Collections.enumeration(list);

        while (enumeration.hasMoreElements()) {

            System.out.println(enumeration.nextElement());

        }

    }

}

这就是在 Java 中迭代 List 的全部内容