按巨大文件ArrayList的日期快速排序

use*_*199 6 java sorting arraylist

我在Java中有一个带有大量文件的ArrayList(~40,000个文件).我需要按日期对这些文件进行升序/降序排序.目前,我用的很简单

Collections.sort(fileList, new FileDateComparator());
Run Code Online (Sandbox Code Playgroud)

FileDateComparator的位置

public class FileDateComparator implements Comparator<File>
{
       @Override
       public int compare(File o1, File o2)
       {
           if(o1.lastModified() < o2.lastModified())
               return -1;
           if(o1.lastModified()==o2.lastModified())
               return 0;
          return 1;
       }
    }
Run Code Online (Sandbox Code Playgroud)

排序对我来说占用的时间太长,比如20秒或更长时间.有没有更有效的方法来实现这一点?我已经尝试使用Apache I/O LastModifiedFileComparator作为比较器,但它似乎以相同的方式实现,因为它需要相同的时间.

the*_*ejh 4

我认为你需要缓存修改时间来加快速度。你可以尝试这样的事情:

class DatedFile {
  File f;
  long moddate;

  public DatedFile(File f, long moddate) {
    this.f = f;
    this.moddate = moddate;
  }
};


ArrayList<DatedFile> datedFiles = new ArrayList<DatedFile>();
for (File f: fileList) {
  datedFiles.add(new DatedFile(f, f.lastModified()));
}
Collections.sort(fileList, new FileDateComparator());
ArrayList<File> sortedFiles = new ArrayList<File>();
for (DatedFile f: datedFiles) {
  sortedFiles.add(f.f);
}
Run Code Online (Sandbox Code Playgroud)

(使用适当的 FileDateComparator 实现)