当前位置: 首页 > 知识库问答 >
问题:

Java8-根据大小改进大量文件的排序时间

西门正平
2023-03-14

我使用java数组列表按大小对目录中的文件进行排序&&如何在java中按元素大小对ArrayList进行排序?

我的问题是实现比较器的最佳方式是什么,这样排序会更快?我被告知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>();
pathList = pathList.subList(0,filterCount);
for (Path filePath : pathList)
    xmlFileList.add(filePath.toFile());
long startSortMillis = System.currentTimeMillis();
sortFilesBySize(xmlFileList);
long timeInMillis = System.currentTimeMillis() - startSortMillis;
    null

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

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

共有1个答案

范弘亮
2023-03-14

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

 类似资料:
  • 我有一个,其中的键是字符串。我需要获取这些键并根据键大小(即字符串长度)对其进行排序,然后将其存储在某个中。 注意:如果两个键的大小相同,那么我们可以把它放在任何顺序。 为(如)。

  • 我有学生(弦)和老师(弦列表)。我想根据讲师人数按降序提取记录。讲师如下示例:[a、b、c]-3、[e、f]-2、[g、h、i、j]-4。 我要按4,3,2的顺序。 这取决于现场讲师阵列的大小。如何使用mongoTemplate或自定义mongodb查询或聚合进行查询??

  • 我有一个java应用程序-一个计算器。我想通过调整应用程序窗口的大小来动态调整按钮的字体大小。如何实现? 我的想法是使用ComponentEvents。我有应用程序窗口的初始大小和初始字体的大小。我想根据按钮的大小改变字体大小,受窗口大小变化的影响。问题是如何在覆盖方法中使用比例[初始窗口大小]/[初始字体大小]?每个字体的比例都不同。

  • 问题内容: 我只是想弄清楚如何根据名称,上次修改时间和大小对目录列表进行排序。我知道您可以访问文件的名称,大小,最后使用File方法修改的时间,但是我不确定如何对其进行排序。如果有人能指出我正确的方向,那就太好了。 问题答案: 您应该实现一个Comparator来根据您提到的属性对文件进行排序,并将其作为参数传递给Arrays.sort方法。

  • 我不能做的是找到一种方法来改变Vbox的尺寸(绿色段),然后根据窗口的大小改变按钮(橙色段)。(当用户使用窗口大小时) 我更喜欢找到一种方法将参数设置到我的css文件中,或者作为最后的手段在我的FXML中。 .css文件: