行业资讯 2025年08月6日
0 收藏 0 点赞 957 浏览 2586 个字
摘要 :

文章目录 1.列表转数组 1.1. List.toArray() 1.2. Stream.toArray() 2. 将数组转换为List 2.1. 使用Arrays.asList() 2.2. 使用Collections.unmodifyingList() 2.3. ……




  • 1.列表转数组
    • 1.1. List.toArray()
    • 1.2. Stream.toArray()
  • 2. 将数组转换为List
    • 2.1. 使用Arrays.asList()
    • 2.2. 使用Collections.unmodifyingList()
    • 2.3. 使用迭代和Stream流
  • 3.结论

学习在 Java 中将List集合转换为数组,以及将给定数组转换为List。我们将学习使用核心 Java API 的转换。

  • 在 Java 中,List是基于索引的有序集合,它通过整数索引位置提供对元素的随机访问。
  • 数组也类似于列表,但存储在连续的内存中

1.列表转数组

我们可以使用以下两种方法将给定List转换为数组。

1.1. List.toArray()

使用list.toArray() 是将List列表转换为数组的最简单方式。它是一个重载的函数。

  • Object[] toArray():返回一个包含列表中所有元素的数组。
  • <T> T[] toArray(T[] a):返回包含列表中所有元素的数组,返回数组的类型与指定的数组a的类型相同。
    如果集合适合指定的数组,则将其返回到其中。否则,将分配给定列表大小的新数组。如果指定的数组长度超过列表长度,则备用索引将填充为null
  • default <T> T[] toArray(IntFunction<T[]> generator):返回一个包含列表中所有元素的数组,提供的生成器函数用于分配返回的数组

让我们看一下这些方法的一些示例。

List<String> list = Arrays.asList(\"A\", \"B\", \"C\");
String[] stringArray;
//1
Object[] objArray = list.toArray();
//2
stringArray = list.toArray(new String[0]);
//3
stringArray = list.toArray(String[]::new);

1.2. Stream.toArray()

stream.toArray()方法类似于上面讨论的list.toArray()方法。它也是一个重载方法。

  • Object[] toArray():返回一个数组,其中包含从列表中获取的流的元素。
  • <A> A[] toArray(IntFunction<A[]> generator):返回一个数组,其中包含从列表中获取的流的元素以及用于分配返回数组的生成器函数
List<String> list = Arrays.asList(\"A\", \"B\", \"C\");
String[] stringArray = list.stream().toArray(String[]::new);

使用流的好处如下:

  • 如果列表的大小相对较大,无法在单个线程中进行处理,我们可以使用list.parallelStream()。并行流使我们能够在不同的核心上并行执行代码。然而,执行的顺序不受我们控制,因此数组中的项目将不按照列表中的顺序排列。
  • 另一个优点是,我们可以应用中间流操作,比如filter(),如果我们只需要从列表中选择性地填充项目。

例如,在给定的代码中,我们只想用列表中以字符‘A’开头的项目来填充数组。

String[] filteredArray = list.stream()
        .filter(s -> s.equals(\"A\"))
        .toArray(String[]::new);

2. 将数组转换为List

2.1. 使用Arrays.asList()

在 Java 中将数组转换为列表是一项相当简单的工作。我们需要使用Arrays.asList() API。请注意,返回的列表是由给定 array 支持的固定大小列表。对数组所做的更改将在返回的列表中可见,对列表所做的更改将在数组中可见。

String[] stringArray = new String[]{\"A\", \"B\", \"C\"};
List<String> list = Arrays.asList(stringArray);

在列表上调用的任何可以更改其大小的方法都将抛出UnsupportedOperationException。尽管如此,我们仍然可以修改列表中存储的对象。

//改变List和数组
list.set(0, \"Aa\");
//List和数组都改变了
System.out.println(list);    //[Aa, B, C]
System.out.println(Arrays.toString(stringArray));    //[Aa, B, C]
list.add(\"D\"); //java.lang.UnsupportedOperationException

2.2. 使用Collections.unmodifyingList()

要创建不可修改的List列表,我们应该使用Collections.unmodifyingList() API。

String[] stringArray = new String[]{\"A\", \"B\", \"C\"};
List<String> list = Collections.unmodifiableList(Arrays.asList(stringArray));
//Cannot change the list
list.set(0, \"Aa\"); //java.lang.UnsupportedOperationException

2.3. 使用迭代和Stream流

创建一个独立于数组的新可变List列表,我们可以使用Stream API 迭代数组并逐个填充List列表。

//改变List但不改变数组
list.add(\"D\");
//List改变了但数组没改变
System.out.println(list);    //[A, B, C, D]
System.out.println(Arrays.toString(stringArray));    //[A, B, C]

3.结论

在这个简短的教程中,我们学会了使用list.toArray()和stream.toArray()方法将列表(例如ArrayList)转换为数组。同样,我们学会了使用Arrays.asList()方法从数组中获取列表。

还有一些其他方法,例如使用Apache Commons和Guava API,但在没有明显好处的情况下,这样做就显得有些多余。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9297.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号