在使用java的Collections.sort工具类对文件进行排序时,大数据量时出现部分数据排序结果异常,原因不明,环境linux ,jdk8(底层使用timSort排序算法),
1.一开始怀疑是此内部类线程安全问题,但对于字符串类型排序结果是正常的,此项似乎被排除
2.怀疑java的数据类型,超出Long数字保存大小,但是对于时间类型,此容器远远足够,可能性不大
3.当数据量较小时,数据的排序结果是正常的(疑问点),似乎跟排序的数据量结果有关系
详细代码如下:
1 // 文件列表排序 2 public static List<File> fileListSort(File[] fileArray, String orderBy) throws Exception { 3 List<File> filelist = Arrays.asList(fileArray); 4 Collections.sort(filelist, new Comparator<File>() { 5 @Override 6 public int compare(File f1, File f2) { 7 int order = 0; 8 switch (orderBy) { 9 case "name": 10 order = f1.getName().toLowerCase().compareTo(f2.getName().toLowerCase()); 11 break; 12 case "size": 13 //order = ((Long)f1.length()).compareTo(f2.length()); 14 order =(f1.length()< f2.length()) ? -1 : ((f1.length()==f2.length()) ? 0 : 1); 15 break; 16 case "lastModifiedTime": 17 //order = ((Long)f1.lastModified()).compareTo(f2.lastModified()); 18 order =(f1.lastModified()<f2.lastModified()) ? -1 : ((f1.lastModified()==f2.lastModified()) ? 0 : 1); 19 break; 20 default: 21 break; 22 } 23 return order; 24 } 25 }); 26 return new ArrayList<>(filelist); 27 }
显示截图: