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作为比较器,但它似乎以相同的方式实现,因为它需要相同的时间.
我认为你需要缓存修改时间来加快速度。你可以尝试这样的事情:
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 实现)