Java中List<Integer>转int[]数组的高效方法(非mapToInt()实现)
将List转换为int[]数组的高效实现方法(除mapToInt外)
下面是几种高效的实现方式,按性能和实用性排序:
1. 手动遍历填充数组(最优性能)
这是最直接且性能最高的方式,避免了Stream或第三方库的额外开销,尤其适合处理大型列表。利用ArrayList的随机访问特性(get(i)为O(1)操作),直接遍历填充数组:
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3)); int[] arr = new int[list.size()]; for (int i = 0; i < list.size(); i++) { arr[i] = list.get(i); // 自动拆箱,等价于调用intValue() }
2. 使用Guava库的Ints.toArray()
如果项目中已经引入Guava依赖,这个封装好的方法内部也是基于手动遍历实现,代码简洁且性能接近手动遍历:
import com.google.common.primitives.Ints; List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3)); int[] arr = Ints.toArray(list);
3. 使用Apache Commons Lang库的ArrayUtils.toPrimitive()
依赖Apache Commons Lang库时,可以先将List转为Integer[],再转换为基本类型数组:
import org.apache.commons.lang3.ArrayUtils; List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3)); int[] arr = ArrayUtils.toPrimitive(list.toArray(new Integer[0]));
注意事项
- 所有转换方式都要求List中不能包含null元素,否则会抛出
NullPointerException(因为int是基本类型,无法存储null)。 - 性能对比:手动遍历 ≈ Guava实现 > Apache Commons实现 > Stream的
mapToInt方式(Stream存在额外的包装/调度开销)。
内容的提问来源于stack exchange,提问作者0xh3xa
相关产品推荐
相关产品推荐

