Java7仮想マシンでファイルの配列を並べ替える際に問題が発生しました。時々、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で失敗しないのですか(Java7で使用されるTimSortアルゴリズムは、通常のマージソートのJava 6よりも制限が厳しいことを読みましたが、違反している場所がわかりません。コンパレータ契約。
クリス