Java Arrays.sort()需要很长时间 [英] Java Arrays.sort() Taking a Long Time
问题描述
我使用Java的 Arrays.sort()
函数按照上次修改时间对文件列表进行排序。 245个文件的排序大约需要5秒钟。这对我来说似乎太长了。我觉得它不应该超过0.5秒。这是一个很好的假设吗?我究竟做错了什么?或者这听起来是否正常?
I am using Java's Arrays.sort()
function to sort a list of files by their last modified time. The sort for 245 files is taking around 5 seconds. This seems too long to me. I feel it shouldn't take more than 0.5 seconds. Is that a good assumption? What am I doing wrong? OR does this sound normal?
public static class LastModifiedComparator implements Comparator<File> {
@Override
public int compare(File f1, File f2) {
return (int)(f1.lastModified() - f2.lastModified());
}
}
File folder = new File( "C:\\Whatever\\" );
File[] filesInFolder = folder.listFiles();
logger.debug("Starting File Sort");
Arrays.sort(filesInFolder, new LastModifiedComparator());
logger.debug("Done File Sort");
日志输出
2012-08-10 14:24:20,333 DEBUG http-8080-4 <ClassName>:73 - Starting File Sort
2012-08-10 14:24:25,915 DEBUG http-8080-4 <ClassName>:75 - Done File Sort
推荐答案
您需要改进 Comparator
逻辑。您需要缓存 lastModified()
值,因为该方法的实现速度很慢。我建议将文件
实例包装到您制作的可比对象中,该对象将缓存该值:
You will need to improve your Comparator
logic. You need to cache the lastModified()
values because the implementation of that method is quite slow. I suggest wrapping the File
instances into a comparable object of your making that will cache the value:
public class FileLmWrapper implements Comparable<FileLmWrapper> {
public final File f;
public final long lastModified;
public FileLmWrapper(File f) {
this.f = f;
lastModified = f.lastModified();
}
public int compareTo(FileLmWrapper other) {
return Long.compare(this.lastModified, other.lastModified);
}
}
这篇关于Java Arrays.sort()需要很长时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!