Java 6の用途は1.7私はCollections.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;
}
}
をソートするオブジェクトのために、このクラスを持っているTimsort
を使用するJavaのに対し、Collections.sort()で2つのオブジェクトを比較するためにマージソートそして私のテストクラスは、議長は、それは私が欲しいの順序を昇順されソートされているテーブルの前に来て、私たちは、Java 1.6でコードを実行すると、それはそれを正しくソート
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.7で実行される場合、コードはまったくソートされません。テーブルはチェアの前にあります。私はチェックし、1.6はマージソートを使用しますが、1.7はTimsortを使用しています。私のコードで何が間違っているのか教えてください。
更新 変数f1の1.7では、椅子がコード実行中に表示されますが、1.6テーブルは表示されます!
ありがとうございます!
エイデン
デバッガを試してみてください。また、 'return Integer.valueOf(priority1).compareTo(priority2);' –
私は@ElliottFrischに同意します。また、この行をこの 'return(priority1> priority2?1:-1);に変更できました。もう一度0の代わりに-1を返します。 – Vucko
しかし、なぜそれをやっているのですか?質問の末尾にあるUPDATEDをお読みください。それは1.7バージョンですか? – Aiden