Javaでオブジェクトをソートする際に利用する Comparable と Comparator について、
書籍 「Java本格入門」 を参考に学んだ内容を整理します。
Comparable と Comparator の違い
✔ Comparable
- ソート対象となる クラス自身に実装する
- 自分自身と相手オブジェクトを比較する
- **1種類のソート(自然順序)**しか定義できない
- 使用メソッド:
compareTo()
✔ Comparator
- 外部オブジェクトとして比較ロジックを実装する
- 任意のクラス同士の比較が可能
-
複数種類のソートが可能(
thenComparingなど) - 使用メソッド:
compare()
使い分けの基準
✔ Comparable を使う場面
- そのクラス自身の 「最も自然な並び方」 を定義したいとき
- デフォルトのソート順として利用したい場合
- 例:生徒を 出席番号順 に並べる
✔ Comparator を使う場面
- 業務的に必要な並び方でソートしたいとき
- 複数のソート条件を切り替えたい場合
- 例:生徒を
- 点数順
- 出席番号順
など用途に応じて並べ替える
- 例:生徒を
実務ではどちらを使うべきか?
結論:業務では Comparator を使うことが一般的。
理由:
- 業務データは複数のソート条件を持つことが多い
- モデルクラスを頻繁に編集したくない(Comparableはクラス改修が必要)
- Java 8以降は Comparator のユーティリティが強力で扱いやすい
まとめ
- Comparable:クラス自身が持つ自然順序を定義する
- Comparator:外部から柔軟に複数の並び替えルールを与える
- 実務では Comparator が主役