gpt4 book ai didi

Java 8 - 按大小改进大量文件的排序时间

转载 作者:行者123 更新时间:2023-11-30 07:49:15 25 4
gpt4 key购买 nike

我查了一下sorting files in directory by size using java array list && How to sort an ArrayList by its elements size in Java?

我的问题是实现比较器的最佳方式是什么,这样排序会更快?有人告诉我100k 文件的排序应该在几秒钟内完成,而不是几分钟,因为文件大小很长。有没有更好的方法来实现比较器?

我的比较器是:

public static List<File> sortFilesBySize(List<File> xmlFileList) {
xmlFileList.sort(Comparator.comparing(File::length).reversed());
return xmlFileList;
}

在哪里

private static List<File> xmlFileList = new ArrayList<File>();

xmlFileList 填充为:

pathList = pathList.subList(0,filterCount);
for (Path filePath : pathList)
xmlFileList.add(filePath.toFile());

filterCount 是我按要排序的文件数进行过滤的方式

并且 sortFilesBySize 被调用为:

long startSortMillis = System.currentTimeMillis();
sortFilesBySize(xmlFileList);
long timeInMillis = System.currentTimeMillis() - startSortMillis;

通过改变排序为 5k、10k、20k 等的文件数量,我得到

  1. 5k ----> 1329 毫秒
  2. 10k ---> 2808 毫秒
  3. 20k ---> 29790 毫秒
  4. 40k ---> 428408 毫秒
  5. 80k ---> 838658 毫秒
  6. 100k --> 1159034 毫秒

可以观察到,在 20k 之后排序需要几分钟。有什么建议可以降低排序时间吗?

我也查了一下https://docs.oracle.com/javase/8/docs/api/java/io/File.html看看我是否可以改进我当前的实现,但似乎没有什么可以跳出来的。

最佳答案

确实是系统调用File.length()引起的。它们的数量随着文件数量的增加而不是线性增加。按照建议缓存它。你会发现排序时间几乎消失了。

关于Java 8 - 按大小改进大量文件的排序时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48614234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com