public class TestComparator { private List<Integer> intList = null; @Before public void setup(){ intList = Arrays.asList( 1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,-2,1,0,-2,0, 0,0,0); } /** * jdk7中錯誤的比較器實現 * 若需在jdk7中兼容此寫法,能夠配置 * -Djava.util.Arrays.useLegacyMergeSort=true * * 由於在1.7中使用了TimSort來實現排序算法,和1.6的MergeSort不一樣 * 不能相互兼容 * * IllegalArgumentException不是必定會被觸發,取決於須要被排序的內容 * 如下的一個int數組是一個可觸發的例子。具體緣由過於複雜,有興趣能夠深刻 * 看看TimSort的算法源碼實現。 */ @Test public void testIllegalComparator(){ try{ Collections.sort(intList, new Comparator<Integer>(){ @Override public int compare(Integer o1, Integer o2) { return o1 > o2 ? 1 : -1; // 不理會相等返回0的狀況 } }); }catch(Exception e){ Assert.assertTrue(e instanceof IllegalArgumentException); } } /** * jdk7中正確的比較器實現 */ @Test public void testCorrectComparator(){ try{ Collections.sort(intList, new Comparator<Integer>(){ @Override public int compare(Integer o1, Integer o2) { if(o1 == o2){ return 0; // 增長相等返回0的狀況 } return o1 > o2 ? 1 : -1; } }); }catch(Exception e){ Assert.assertTrue(false); } Assert.assertTrue(true); } @After public void teardown(){} }