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