返回
Java 中 ArrayList<Integer> 转换为 int[] 的两种高效方法
java
2024-03-04 10:30:42
将 ArrayList
在 Java 中,有时你需要将包含 Integer 对象的 ArrayList 转换为原始 int[] 数组。虽然看起来很简单,但没有直接的方法可以做到这一点。本篇文章将介绍两种将 ArrayList
方法 1:使用 toArray()
可以使用 toArray() 方法将 ArrayList 转换为包含 Integer 对象的 Object 数组。然后,可以使用 Arrays.stream() 和 mapToInt() 转换为原始 int[]:
List<Integer> x = new ArrayList<Integer>();
int[] n = x.toArray(new Integer[x.size()]);
n = Arrays.stream(n).mapToInt(Integer::intValue).toArray();
方法 2:使用流和装箱
另一种方法是使用 Java 8 流和装箱:
List<Integer> x = new ArrayList<Integer>();
int[] n = x.stream().mapToInt(i -> i).toArray();
示例
以下示例演示了如何使用这些方法转换 ArrayList:
List<Integer> x = new ArrayList<>();
x.add(1);
x.add(2);
x.add(3);
// 方法 1:使用 toArray()
int[] n1 = x.toArray(new Integer[x.size()]);
n1 = Arrays.stream(n1).mapToInt(Integer::intValue).toArray();
// 方法 2:使用流和装箱
int[] n2 = x.stream().mapToInt(i -> i).toArray();
System.out.println(Arrays.toString(n1)); // 输出:[1, 2, 3]
System.out.println(Arrays.toString(n2)); // 输出:[1, 2, 3]
方法比较
- 方法 1 使用了装箱和拆箱操作,性能可能较低。
- 方法 2 仅适用于 Java 8 及更高版本。
常见问题解答
- Q1:为什么不能直接使用 ArrayList.toArray() 方法将 ArrayList
转换为 int[]? - A1:toArray() 方法返回一个 Object[] 数组,而不是 int[] 数组。
- Q2:是否可以在方法 1 中使用 Arrays.asList() 方法将 int[] 转换为 ArrayList
? - A2:可以,但是要小心装箱和拆箱的性能开销。
- Q3:方法 2 中的 Lambda 表达式中的 i -> i 是什么?
- A3:它是 Java 8 中的简写 lambda 表达式,用于将 Integer 映射到 int。
- Q4:转换后,ArrayList 和 int[] 是否指向同一数据?
- A4:不,转换后,ArrayList 和 int[] 将独立于彼此存在。
- Q5:哪种方法更推荐?
- A5:对于 Java 8 及更高版本,方法 2 更推荐,因为它更简洁、高效。对于较低版本的 Java,可以使用方法 1。
结论
将 ArrayList