如何在java中执行内存高效的数组排序?

如何在java中执行内存高效的数组排序?,java,algorithm,sorting,memory,Java,Algorithm,Sorting,Memory,我想对大量字符串(尤其是File.list(),我无法进一步外部化或减少)进行排序,而不需要使用[大量]额外内存 Arrays.sort()说它进行合并排序,wikipedia说有些实现分配原始数组的大小来存储排序后的输出。(该方法中的System.arraycopy引用似乎支持这一点) 我是否可以使用内存效率高的就地排序算法?快速排序已经就位,速度非常快。请参阅。您可以为就地排序编写堆排序算法 String在Java中是不可变的。因此,当问题中的Strings数组重复时,它们不需要像您期望的那

我想对大量字符串(尤其是
File.list()
,我无法进一步外部化或减少)进行排序,而不需要使用[大量]额外内存

Arrays.sort()
说它进行合并排序,wikipedia说有些实现分配原始数组的大小来存储排序后的输出。(该方法中的
System.arraycopy
引用似乎支持这一点)


我是否可以使用内存效率高的就地排序算法?

快速排序已经就位,速度非常快。请参阅。

您可以为就地排序编写堆排序算法

String
在Java中是不可变的。因此,当问题中的
String
s数组重复时,它们不需要像您期望的那样多的空间。实际上,开销可以非常小

换句话说,Java的
数组#sort()
可以很好地满足您的解决方案。您可以自己测试性能


对于问题的标题,“的答案”和“的答案”都很好。

手工编写的排序算法有多复杂,您希望它稳定吗(即等值元素在最终数组中的显示顺序与它们开始时的顺序相同)?除非您开始查看
System.identityHashcode
或其他内容,否则您不能真正区分字符串的不同之处;apache或google是否有包含快速排序的库?(我肯定我以前见过…)快速排序非常快,但它也是一种更昂贵的排序,内存-wise@Sam快速排序可以在适当的地方实现,我相信这会使它具有良好的内存。@Sam:嗯?快速排序使用O(logn)额外的内存,如果写得不好,这是预期的情况,如果写得好,这是最坏的情况。因此1000000(文件)中的log2n是20*2-3个对象,每个递归大约有100个对象引用的大小,这与文件名长度相比是相当苍白的,复制的只是对象引用数组(通常每个字符串4或8字节),而不是字符串对象本身,因此不是每个字符串中的字符数组。