Java Set 转 List

2025年7月21日 | 阅读 5 分钟

在 Java 中,可以使用多种方法将 Set 转换为 List,每种方法都有其优点:使用 ArrayList 构造函数通常是最简洁和最常见的方法。我们可以直接将 Set 实例传递给 ArrayList 的构造函数。

Java Set to List

在 Java 中,将 Set 转换为 List 的方法如下:

  • 朴素方法
  • 使用构造函数(ArrayList 或 LinkedList)
  • 使用 ArrayList addAll() 方法
  • 使用 Java 中的 Stream
  • 使用 List.copyOf()(Java 10+)

朴素方法

原生方法的逻辑非常简单。在此方法中,我们只需创建一个 Set(HashSet 或 TreeSet),然后迭代 Set,并通过循环将 Set 中的所有元素添加到 List 中。

示例

编译并运行

输出

ArrayList is: 
Belgium
Chicago
China
America
London
Australia
Dubai
Paris
Las Vegas

使用构造函数(ArrayList 或 LinkedList 类)

逻辑与上面相同。唯一的区别是我们使用了 ArrayList 和 LinkedList 类的构造函数,并将 set 元素传递给了构造函数。

让我们看一个示例。

示例

编译并运行

输出

ArrayList is: 
New York
Dallas
Tampa
Tuscon
San Jose
Tulsa

LinkedList is: 
New York
Dallas
Tampa
Tuscon
San Jose
Tulsa

使用 ArrayList.addAll() 方法

ArrayList.addAll() 方法将指定集合中的所有元素添加到此列表的末尾,顺序由指定集合的 Iterator 返回。它覆盖了 AbstractCollection 类的 addAll() 方法。

示例

编译并运行

输出

ArrayList is: 
Texas
Illinois
Columbus
California
Austin
Dallas
San Jose

LinkedList is: 
Texas
Illinois
Columbus
California
Austin
Dallas
San Jose

使用 Java 中的 Stream

如果我们使用 Stream 来转换 Set 到 List,首先,我们将 Set 转换为一个流,然后将流转换为一个 List。它仅在 Java 8 或更高版本中有效。

stream(): stream() 方法返回 Set 或 List 的常规对象流。

Stream.collect(): Stream 类的 collect() 方法用于将任何 Stream 的元素累积到 Collection 中。

Collectors.toList(): 该方法返回一个 Collector,该 Collector 将输入元素收集到一个新的 List 中。

让我们看一个示例。

示例

编译并运行

输出

List is: 
Bristol
Wales
London
England
Scotland
Cambridge

使用 List.copyOf()(Java 10+)

copyOf() 方法定义在 List 接口中。它创建一个包含给定 Set 元素的、不可修改的 List,顺序与其插入顺序一致。

示例

编译并运行

输出

[Apple, Orange, Banana]

Java Set 转 List 选择题

1. 下列哪种是在 Java 中将 Set 转换为 List 的原生方法?

  1. 使用 List<String> list = new ArrayList<>(set);
  2. 使用 set.stream().collect(Collectors.toList())
  3. 使用循环迭代 Set 并将每个元素添加到 List 中
  4. 使用 Arrays.asList(set)
 

答案:C

解释:原生方法涉及手动迭代 Set 并使用循环将每个元素添加到新的 List 中。这是最基本和最直接的方法,不依赖于高级功能或构造函数。


2. 哪个 Java 方法允许我们将 Stream 中的元素收集到 List 中?

  1. stream()
  2. map()
  3. filter()
  4. collect(Collectors.toList())
 

答案: D

解释:collect(Collectors.toList()) 方法将流中的元素收集起来并放入一个新的 List 中。在 Stream API 中,它在 stream() 之后使用。


3. 下列哪种方法不是在 Java 中将 Set 转换为 List 的有效方法?

  1. 使用构造函数,如 new ArrayList<>(set)
  2. 使用 ArrayList 的 addAll() 方法
  3. 使用 Stream API
  4. 使用 Arrays.asList(set)
 

答案: D

解释:Arrays.asList() 用于转换数组,而不是 Set。你不能直接将 Set 传递给 Arrays.asList() 来将其转换为 List。这会导致编译错误。


4. 哪个方法可以一次性将 Set 的所有元素添加到 List 中?

  1. add(set)
  2. addAll(set)
  3. append(set)
  4. putAll(set)
 

答案: B

解释:Collection 接口的 addAll() 方法将给定集合(如 Set)的所有元素添加到当前 List 中。


5. 如果我们使用基于流的方法将 Set 转换为 List,最低需要哪个 Java 版本?

  1. Java 6
  2. Java 7
  3. Java 8
  4. Java 9
 

答案:C

解释:Stream API,包括 stream() 和 collect() 等方法,是在 Java 8 中引入的。因此,此方法需要 Java 8 或更高版本。