我在对 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 算法比 Java 6 的普通 Merge 算法更具限制性,但我仍然看不到我在哪里违反比较合同。
克里斯