返回

Java 中 ArrayList<Integer> 转换为 int[] 的两种高效方法

java

将 ArrayList 转换为 int[]: Java 中的两种方法

在 Java 中,有时你需要将包含 Integer 对象的 ArrayList 转换为原始 int[] 数组。虽然看起来很简单,但没有直接的方法可以做到这一点。本篇文章将介绍两种将 ArrayList 转换为 int[] 的方法:使用 toArray() 和使用流和装箱。

方法 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 转换为 int[] 可以通过两种方法实现:使用 toArray() 和使用流和装箱。选择哪种方法取决于 Java 版本和性能要求。