在JDK1.7上使用mofify日期对文件数组进行排序时出现IllegalArgumentException

时间:2012-07-18 16:37:40

标签: java sorting java-7

我在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更具限制性,但我仍然无法看到我违反的地方比较合同。

克里斯

1 个答案:

答案 0 :(得分:2)

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

提高速度的一种方法(因为lastModified很昂贵)并且避免这个问题就是建立一个修改日期的地图。

Map<File, Long> lastModifiedMap =