Java中int[]与ArrayList<>数组转换方法详解
作者:飞滕人生TYF
这篇文章主要介绍了在Java中将int[]和ArrayList进行双向转换的方法,包括手动遍历和使用Java8 Stream API两种方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
前言
在 Java 中,int[]
与 ArrayList<Integer>
是两种常用的数据结构。由于 int[]
是基本数据类型数组,而 ArrayList<Integer>
是对象集合类型,两者的转换需要注意类型转换的细节。以下是完整的讲解和实现方法。
1. int[] 转换为 ArrayList
方法 1:使用手动遍历
通过遍历数组,将每个元素逐一添加到 ArrayList<Integer>
中。
代码实现
import java.util.ArrayList; public class Main { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; // 转换为 ArrayList ArrayList<Integer> list = new ArrayList<>(); for (int num : array) { list.add(num); } System.out.println(list); // 输出: [1, 2, 3, 4, 5] } }
说明
- 手动遍历适合任何版本的 Java。
- 时间复杂度:O ( n ) O(n)O(n),
n
是数组的长度。
方法 2:使用 Java 8 Stream
通过 Arrays.stream()
和 boxed()
方法,将 int[]
转换为 Stream<Integer>
,再收集到 ArrayList<Integer>
。
代码实现
import java.util.ArrayList; import java.util.Arrays; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; // 使用 Stream 转换为 ArrayList ArrayList<Integer> list = Arrays.stream(array) .boxed() // 转为 Integer 类型 .collect(Collectors.toCollection(ArrayList::new)); System.out.println(list); // 输出: [1, 2, 3, 4, 5] } }
说明
- 适用于 Java 8 及以上版本。
- 使用
boxed()
将基本类型int
转换为包装类型Integer
。
2. ArrayList 转换为 int[]
方法 1:使用手动遍历
通过遍历 ArrayList<Integer>
,逐一将元素添加到 int[]
中。
代码实现
import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); // 转换为 int[] int[] array = new int[list.size()]; for (int i = 0; i < list.size(); i++) { array[i] = list.get(i); // 拆箱 Integer -> int } System.out.println(Arrays.toString(array)); // 输出: [1, 2, 3] } }
说明
- 手动遍历适合任何版本的 Java。
- 通过
list.get(i)
获取元素并自动拆箱为int
。
方法 2:使用 Java 8 Stream
通过 Stream.mapToInt()
将 ArrayList<Integer>
转换为 int[]
。
代码实现
import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); // 使用 Stream 转换为 int[] int[] array = list.stream() .mapToInt(Integer::intValue) // 转为 int 类型 .toArray(); System.out.println(Arrays.toString(array)); // 输出: [1, 2, 3] } }
说明
- 适用于 Java 8 及以上版本。
- 使用
mapToInt()
方法完成从Integer
到int
的转换。
3. 综合示例
以下代码实现了 int[]
和 ArrayList<Integer>
的双向转换。
import java.util.ArrayList; import java.util.Arrays; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // int[] 转 ArrayList<Integer> int[] array = {1, 2, 3, 4, 5}; ArrayList<Integer> list = Arrays.stream(array) .boxed() // 转换为 Integer .collect(Collectors.toCollection(ArrayList::new)); System.out.println("int[] -> ArrayList<Integer>: " + list); // ArrayList<Integer> 转 int[] int[] newArray = list.stream() .mapToInt(Integer::intValue) // 转换为 int .toArray(); System.out.println("ArrayList<Integer> -> int[]: " + Arrays.toString(newArray)); } }
运行结果
int[] -> ArrayList<Integer>: [1, 2, 3, 4, 5] ArrayList<Integer> -> int[]: [1, 2, 3, 4, 5]
4. 注意事项自动装箱与拆箱:
- 从
int
转换为Integer
是自动装箱。 - 从
Integer
转换为int
是自动拆箱。 - 手动遍历时,这些操作由 JVM 自动完成。
- 从
null 的处理:
- 如果
ArrayList<Integer>
包含null
,在转换为int[]
时会抛出NullPointerException
。 - 示例:
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, null, 3)); int[] array = list.stream().mapToInt(Integer::intValue).toArray(); // 抛出 NullPointerException
- 如果
性能:
- 手动遍历方法比
Stream
方法稍快,适用于性能敏感场景。 Stream
方法代码更简洁,推荐在现代 Java 项目中使用。
- 手动遍历方法比
5. 方法对比
转换方向 | 方法 | 优点 | 缺点 |
---|---|---|---|
int[] -> ArrayList | 手动遍历 | 简单、高效 | 代码稍显冗长 |
Stream.boxed() | 代码简洁,现代风格 | Java 8 及以上支持 | |
ArrayList -> int[] | 手动遍历 | 简单、高效 | 代码稍显冗长 |
Stream.mapToInt() | 代码简洁,现代风格 | Java 8 及以上支持 |
6. 总结
- 推荐方案:
- 如果使用 Java 8 或更高版本,优先使用
Stream
,代码更简洁。 - 对性能要求高的场景,可以选择手动遍历。
- 如果使用 Java 8 或更高版本,优先使用
- 核心操作:
boxed()
:将基本类型转换为包装类型。mapToInt()
:将包装类型转换为基本类型。
总结
到此这篇关于Java中int[]与ArrayList<>数组转换方法的文章就介绍到这了,更多相关int[]与ArrayList<>数组转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!