gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:41:16 24 4
gpt4 key购买 nike

我在 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 的正常合并排序更具限制性,但我仍然看不出我在哪里违反了比较器合约。

克里斯

最佳答案

这会破坏其中一个文件在排序时被修改的情况。

加快速度(因为 LastModified 成本高昂)并避免此问题的一种方法是构建修改日期映射。

Map<File, Long> lastModifiedMap = 

关于java - 在 JDK1.7 上使用修改日期对文件数组进行排序时出现 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11546210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com