我在Java 7虚拟机上排序文件数组时遇到了一些问题。有时我从TimSort那里得到IllegalArgumentException抱怨“比较方法违反了它的总契约!”。比较器相对简单:
final File[] filesList = importDirectory.listFiles();
Arrays.sort(filesList, new Comparator<File>() {
public int compare(File f1, File f2) {
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
}
});
这个实现有什么问题?为什么它不能在Java 6 VM上失败(我已经读过,Java 7中使用的TimSort算法比普通的Merge类型的Java 6更具限制性,但我仍然无法看到我违反的地方比较合同。
克里斯
答案 0 :(得分:2)
当您对其中一个文件进行排序时,会破坏其中一个文件。
提高速度的一种方法(因为lastModified很昂贵)并且避免这个问题就是建立一个修改日期的地图。
Map<File, Long> lastModifiedMap =