0

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

克里斯

4

1 回答 1

2

当您对其进行排序时,这会破坏其中一个文件被修改。

加快速度(因为 lastModified 很昂贵)并避免此问题的一种方法是构建修改日期地图。

Map<File, Long> lastModifiedMap = 
于 2012-07-18T16:41:01.530 回答