1. 程式人生 > >java.lang.IllegalArgumentException: Comparison method violates its general contract!的解決方法

java.lang.IllegalArgumentException: Comparison method violates its general contract!的解決方法

       上午在敲程式碼時,對一個List集合進行排序,程式碼如下:

     Collections.sort(list2,new Comparator<Integer>()
		{
			@Override
			public int compare(Integer o1, Integer o2)
			{
				if(o2>o1)
				{
					return 1;
					
				}
				
				return -1;
				
			}
			
		});

     執行報錯Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
    at java.util.TimSort.mergeHi(TimSort.java:868)
    at java.util.TimSort.mergeAt(TimSort.java:485)
    at java.util.TimSort.mergeCollapse(TimSort.java:408)
    at java.util.TimSort.sort(TimSort.java:214)
    at java.util.TimSort.sort(TimSort.java:173)
    at java.util.Arrays.sort(Arrays.java:659)
    at java.util.Collections.sort(Collections.java:217)
    at app.controllers.Test.main(Test.java:43)

       貌似在JDK7下出的錯,具體原因沒深究,直接改下程式碼如下解決:

    Collections.sort(list2,new Comparator<Integer>()
		{
			@Override
			public int compare(Integer o1, Integer o2)
			{
			    return o2-o1;   
			}
			
		});