遍历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 的全部内容