廢話少說,直接上報錯信息(如下圖)
最近公司app上有個列表時而報錯,時而不報,復現問題不是很容易,翻看了下日志才知道是排序的地方有問題,這還是我第一次遇到,具體定位:Collections.sort(xxx),
於是再看對應的compareTo方法,如下
1 @Override 2 public int compareTo(xxx o) { 3 return this.getPublishTime().getTime() < o.getPublishTime().getTime() ? 1 : -1; 4 }
咋一看,這個倒序排列就是沒有對==的情況進行處理,而是將==算作-1處理了,Google了一下,發現是由於jdk7排序換了新的算法Timsort,這樣就會對排序的大小進行嚴格校驗,而jdk6是沒有對此進行校驗的
所以解決方法就簡單了,直接對==的情況加下處理即可。另外網上也提供了指定使用排序算法的解決方案(添加JVM參數:-Djava.util.Arrays.useLegacyMergeSort=true ),這個我沒有試驗