Javadocをよく読む(Comparator,Comparable編)

はじめに

Javadocをしっかり読んでみるシリーズです。
今回はComparator/Comparableを見ていきます。どちらもオブジェクトの順序付けに関連するクラスです。

Comparable

このインタフェースを実装する各クラスのオブジェクトに全体順序付けを強制します。この順序付けはクラスの自然順序付けと呼ばれ、このクラスのcompareToメソッドは自然比較メソッドと呼ばれます。 …

クラスの順序付けを強制するインターフェースです。

Comparableのメソッド

順序付けのルールはこのインターフェースの唯一のメソッドcompareToに実装します。以下compareToのJavadocの抜粋です。

このオブジェクトと指定されたオブジェクトの順序を比較します。このオブジェクトが指定されたオブジェクトより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数を返します。…

 

Comparator

オブジェクトのコレクションで全体順序付けを行う比較関数です。…

似たような感じですが、こちらは全体順序付けを行う比較関数です。

Comparatorのメソッド(Java7)

Comparatble#compareToとほぼ同じ説明が書いてあります。

順序付けのために 2 つの引数を比較します。最初の引数が 2 番目の引数より小さい場合は負の整数、両方が等しい場合は 0、最初の引数が 2 番目の引数より大きい場合は正の整数を返します。…

*Java8で追加されたメソッドについては後述

Comparable/Comaratorの違い?

どちらのインタフェースもぱっと見同じような感じがする。。ので、StackOverflowをちょっと検索してみました。

なるほど。以下の違いがあるということでした。

  • Comparableは自身が他オブジェクトと比較できることを表す
  • Comapratorは2つの異なるオブジェクトを比較できることを表す(自身を比較するわけではない)

 

Comparatorのメソッド(Java8)

Java8では多くのdefaultメソッドとstaticメソッドがComparatorインターフェースに追加されています。以下に主要なメソッドを抜粋します。

comparing

型Tからソート・キーを抽出する関数を受け取り、指定されたComparatorを使ってそのソート・キーで比較するComparatorを返します。…

thenComparing

辞書式順序コンパレータをもう一方のコンパレータとともに返します。このComparatorで2つの要素が等しい(つまり、compare(a, b) == 0)と見なされる場合は、otherを使ってその順序が決められます。…

nullsFirst

nullをnull以外より小さいとみなす、nullフレンドリのコンパレータを返します。両方ともnullである場合、それらは等しいと見なされます。両方ともnull以外である場合、指定されたComparatorを使ってその順序が決められます。…

まとめ

  • 自身の順序付けを規定したい場合はComparableを実装し、
  • 順序付けの関数を規定したい場合はComparatorを実装する
  • Java8のComparatorは便利メソッドがたくさん追加されている

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA