Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从可数整数中获得排序数组的最快方法_Java - Fatal编程技术网

Java 从可数整数中获得排序数组的最快方法

Java 从可数整数中获得排序数组的最快方法,java,Java,可能重复: 从未排序的整数中获取排序数组的最快方法是什么?目前,我通过迭代iterable n次(其中n是列表的大小)来实现这一点,每次都从iterable中获取最高值&将其放入数组中。但我想把这件事清理干净&让一些好的图书馆帮我做 可能我不介意为此使用任何流行的库,如Guava等。如前所述,最简单且可能最快的方法是填充集合并对其进行排序-在这种情况下,我只需使用ArrayList: List<Integer> sortedList = new ArrayList<>(

可能重复:

从未排序的整数中获取排序数组的最快方法是什么?目前,我通过迭代iterable n次(其中n是列表的大小)来实现这一点,每次都从iterable中获取最高值&将其放入数组中。但我想把这件事清理干净&让一些好的图书馆帮我做


可能我不介意为此使用任何流行的库,如Guava等。

如前所述,最简单且可能最快的方法是填充集合并对其进行排序-在这种情况下,我只需使用ArrayList:

List<Integer> sortedList = new ArrayList<>();
for (Integer i : yourIterable) {
    sortedList.add(i);
}
Collections.sort(sortedList);
List sortedList=new ArrayList();
for(整数i:yourIterable){
分类列表。添加(i);
}
收集.分类(分类列表);
如果您事先知道Iterable的大小,可以使用正确的大小初始化arraylist,以获得额外的效率增益:

List<Integer> sortedList = new ArrayList<>(size);
List sortedList=新的数组列表(大小);

这与assylias已经提供的答案基本相同,但是如果您在类路径上有Google Guava,您可以将其缩短为:

import java.util.Collections;
import java.util.List;

import com.google.common.collect.Lists;

...

List list = Lists.newArrayList(iterable);
Collections.sort(list);

填充然后排序是否不够快?相关:使用JDK8
stream(iterable).sorted(comparator).toArray()
。我知道这不是一个确切的答案,但每个人都应该检查:
Ordering.natural()。sortedCopy(integers)
做得很好。我认为标记为重复的问题本质上是不同的@路易斯瓦瑟曼:我相信你应该把它作为一个答案来发布,这应该被接受(很抱歉在5年后发布)。我用它对火花对rdd的值进行排序。感谢您提供答案。。如果我知道大小,我不应该使用int[]来代替列表吗?@user01不确定哪个更快。对
int[]
数组进行排序可能比对
列表进行排序快一些,但是创建数组需要取消对所有整数的装箱,而创建列表只需复制引用。您应该测试这两种方法并做出决定。如果你这样做了,一定要阅读。