「クラス内で自然な順序を選択する」例を教えてください。
docs.oracle で Object Ordering を読みましたが、複数の要素がある場合に自然順序付けがどのように決定されるかについては言及されていません。クラスに名前、年齢、住所、電話番号などの要素がある場合。自然な順序付けを行うために選択されるのはどれですか?
次に、ここの投稿で、自然な順序を決定できることを読みました。私は Java の初心者で、宿題に取り組み、コレクション フレームワークを初めて試しています。
「クラス内で自然な順序を選択する」例を教えてください。
docs.oracle で Object Ordering を読みましたが、複数の要素がある場合に自然順序付けがどのように決定されるかについては言及されていません。クラスに名前、年齢、住所、電話番号などの要素がある場合。自然な順序付けを行うために選択されるのはどれですか?
次に、ここの投稿で、自然な順序を決定できることを読みました。私は Java の初心者で、宿題に取り組み、コレクション フレームワークを初めて試しています。
はい、あなたは人が自然な順序を決めることができると言っているのは正しいです。Comparableを実装し、compareTo()メソッドの独自の実装を作成します。その方法では、何が何に勝るかを決定します。
実装が少し重いように見えますが、これには Comparator クラスを好みます。その理由は、一部のオブジェクトでは、比較対象が常に明確であるとは限らないためです。使用.compareTo()
(つまり、IComparable の実装) では、明示的な Comparator ほど明確にはなりません。
BasketballPlayer player1 = new BasketballPlayer("Smith", 2.02);
BasketballPlayer player2 = new BasketballPlayer("Jones", 1.95);
List<BasketballPlayer> playersByHeight = new ArrayList<BasketballPlayer>();
List<BasketballPlayer> playersByName = new ArrayList<BasketballPlayer>();
playersByHeight.add(player1);
playersByHeight.add(player2);
playersByName.add(player1);
playersByName.add(player2);
Collections.sort(playersByName, new Comparator<BasketballPlayer>() {
@Override
public int compare(BasketballPlayer o1, BasketballPlayer o2) {
return o1.getName().compareTo(o2.getName());
}
});
Collections.sort(playersByHeight, new Comparator<BasketballPlayer>() {
@Override
public int compare(BasketballPlayer o1, BasketballPlayer o2) {
return o1.getHeight().compareTo(o2.getHeight());
}
});
ここでは匿名クラスを使用していますが、必要に応じて Comparators を独自の (名前付き) クラスにすることもできます。