【发布时间】:2022-09-28 00:45:50
【问题描述】:
我正在尝试将长度为 1,000,000 的很长的int[] 转换为Integer[],以便我可以使用自定义比较器对其进行排序(根据定义的Map<Integer, List<Integer>> 中相应列表的长度对元素进行排序)。
我做了以下事情:
private static Integer[] convert(int[] arr) {
Integer[] ans = new Integer[arr.length];
for (int i = 0; i < arr.length; i++) {
ans[i] = arr[i];
}
return ans;
}
它对我很有效,但我也遇到过
Integer[] ans = Arrays.stream(intArray).boxed().toArray( Integer[]::new );
和
Integer[] ans = IntStream.of(intArray).boxed().toArray( Integer[]::new );
有没有比其他的要快得多?或者有没有其他足够快的方法来缩短运行时间?
-
您确定您拥有的解决方案尚未产生足够的性能吗?
-
过早的优化。除非您的数组包含数百万个元素,否则您不会看到任何差异,即使这样,由于 JIT 优化,找出哪个稍微快一点也是一个重大项目。除非您能证明存在瓶颈,否则请不要担心。
-
好吧,你为什么需要
Integer[]?您可以为int类型编写一个比较器。 -
Integer[]真的有必要吗?您的比较器看起来如何?无论如何,在应用算术运算符时,它可能会将所有Integers 拆箱到ints -
请注意,
time-complexity标签并不适用于所有关于运行代码需要多长时间的问题。这是针对与以下相关的问题算法所花费的时间与问题大小的关系.无论“某事”是什么,对数组的每个元素做某事都将是 O(n)。
标签: java arrays performance