Java 6的使用合併排序兩個對象在Collections.sort()而Java 1.7使用TimsortCollections.sort不工作的Java 1.7
我有這個類對象進行排序
Class ObjectSort
{
String Name = "";
int priority = 0;
public ObjectSort (String name, int priority)
{
this.Name = Name;
this.priority = priority;
}
public getPriority()
{
return priority;
}
}
比較我的測試類是
TestClass
{
...main()
{
List<ObjectSort> sorted = new ArrayList<ObjectSort>();
sorted.add ("Table", 99);
sorted.add ("Chair", 1);
Collections.sort(sorted, new Comparator());
}
// inner class to define comparator logic
private static final class Comparator implements java.util.Comparator<ObjectSort>
{
@Override
public int compare (ObjectSort f1, ObjectSort f2)
{
try
{
// Get the allocation priorities
int priority1 = f1.getPriority();
int priority2 = f2.getPriority();
if (priority1 == priority2)
return 0;
else
return (priority1 > priority2 ? 1 : 0);
}
catch (Exception e)
{
// Shouldn't happen, because we have the objects OK and there's no database activity
// happening here.
assert true;
}
return 0;
}
}
}
現在,當我們在Java 1.6上運行的代碼,它正確地排序它,主席來之前表是它的排序是升序排列,這是我想要的。
但其中的代碼是用Java 1.7運行時,它不會它在所有排序,表自帶椅子前。我檢查和1.6使用合併排序,而1.7使用Timsort。請幫我告訴我的代碼中有什麼問題?
UPDATE 在變量f1 1.7,主席代碼執行過程中來,而在1.6表來了!
謝謝!
艾登
嘗試一個調試器。另外'返回Integer.valueOf(優先級爲1).compareTo(優先級2);' –
我@ElliottFrisch同意。你也可以將這一行改成這個'return(priority1> priority2?1:-1);'而不是0再次返回-1。 – Vucko
但它爲什麼這樣做?請閱讀問題底部的UPDATED。是由於1.7版本嗎? – Aiden