JavaA2Z

KAB-studio > プログラミング > JavaA2Z > compareToとは

compareTo

日本語 比較
英語 compare to
ふりがな こんぺあとぅー
フリガナ コンペアトゥー

解説

ふたつの値を比較し大小の結果を返すメソッド
 
Comparableインターフェイスメソッド実装したもの。
Integerクラス等のラッパークラスや、Stringクラス等が実装している。
 
compareTo()メソッドは「A.compareTo( B )」の形式で使用する。
この戻り値は、「A」が「B」より小さいとマイナス、一致は0、それ以外はプラスとなる。
これは「A - B」の結果と一致する。
一般に比較をうためのメソッドとして使用する。

また、Arraysクラスのsort()メソッド等、比較をう場合には、compareTo()メソッド実装が必要となる場合がある。
その場合、まずComparableインターフェイス実装し、そのcompareTo()メソッド実装する。その戻り値は、比較結果としてマイナス、0、プラスのいずれかを返す。
この時、compareTo()メソッドの中では、上記の例で言えば「this」が「A」に、「第1引数」が「B」に該当する。
そのため、「this」が「第1引数」より小さいとマイナス、一致は0、それ以外はプラスを戻り値として返すように実装しなければならない。

これは前述のように「this - 第1引数」と同じである。また、比較対象にcompareTo()メソッドを使用できるのであればその結果を返してもよい。それ以外であれば、ifswitchを使用して比較をえばよい。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.util.Arrays;

public class Sample
{
    public static void main( String[] args )
    {
        // プリミティブ型のラッパークラスや、Stringクラスに実装されています。
        System.out.println( "ABC".compareTo( "DEF" ) );
        // -3
        System.out.println( "ABC".compareTo( "ABC" ) );
        // 0
        System.out.println( "DEF".compareTo( "ABC" ) );
        // 3
        // つまり、compareTo()メソッドを呼ぶ際の「左側」の方が小さいと
        // マイナス、一致なら0、それ以外はプラスが返ってきます。
        // (何をもって「小さい」「大きい」と判断するかは比較対象に
        // よって決まります。文字列であれば辞書順、ということです)

        // 自分で作ったクラスで試してみます。
        Data data = new Data( 100 );
        // Dataクラスの配列を作ります。
        Data[] datas = new Data[]
            { new Data( 300 )
            , new Data( 100 )
            , new Data( 200 )
            };
        // とりあえず確認用に出力。
        forint iF1 = 0; iF1 < datas.length; ++iF1 )
        {
            System.out.print( datas[iF1].i + ", " );
        }
        System.out.println();
        // 300, 100, 200, 

        // ソートします。
        Arrays.sort( datas );
        forint iF1 = 0; iF1 < datas.length; ++iF1 )
        {
            System.out.print( datas[iF1].i + ", " );
        }
        System.out.println();
        // 100, 200, 300, 

        // このソートの際に「Dataクラスの比較」が
        // 行われていて、そこでcompareTo()メソッドが
        // 使われています。
    }
}

/**
 * データクラス。
 * Comparableインターフェイスを実装します。
 */
class Data implements Comparable
{
    /**
     * フィールド。
     * この中の値で比較を行います。
     */
    public int i = 0;

    /**
     * コンストラクタ。
     */
    public Data( int i )
    {
        this.i = i;
    }

    /**
     * 比較用メソッドcompareTo()を実装します。
     * このメソッドがArraysクラスのsort()メソッド内で
     * 呼び出されて、各要素の比較が行われます。
     */
    public int compareTo( Object object )
    {
        // 引数に「配列のある一要素」が渡されるのでキャストします。
        Data data = (Data)object;
        // ちなみに自分自身(this)も「配列のある一要素」です。
        // このふたつを比較した結果を返します。

        return this.i - data.i;
        // プリミティブ型なら上記のように「this - object」が
        // 一番簡単でしょう。

        // クラスの場合はcompareTo()メソッドを、
        // プリミティブ型の場合にはラッパークラスの
        // compareTo()メソッドを使用するのがいいでしょう。
        // それが不可能な場合や、特別な結果を返す場合、
        // thisの方が「上」「前」「先」「小さい」「少ない」ならマイナス、
        // 一致してるなら0、それ以外はプラスを返す、としてもいいでしょう。
    }
}
// Sample.java
import java.util.Arrays;

public class Sample
{
    public static void main( String[] args )
    {
        // プリミティブ型のラッパークラスや、Stringクラスに実装されています。
        System.out.println( "ABC".compareTo( "DEF" ) );
        // -3
        System.out.println( "ABC".compareTo( "ABC" ) );
        // 0
        System.out.println( "DEF".compareTo( "ABC" ) );
        // 3
        // つまり、compareTo()メソッドを呼ぶ際の「左側」の方が小さいと
        // マイナス、一致なら0、それ以外はプラスが返ってきます。
        // (何をもって「小さい」「大きい」と判断するかは比較対象に
        // よって決まります。文字列であれば辞書順、ということです)

        // 自分で作ったクラスで試してみます。
        Data data = new Data( 100 );
        // Dataクラスの配列を作ります。
        Data[] datas = new Data[]
            { new Data( 300 )
            , new Data( 100 )
            , new Data( 200 )
            };
        // とりあえず確認用に出力。
        for( int iF1 = 0; iF1 < datas.length; ++iF1 )
        {
            System.out.print( datas[iF1].i + ", " );
        }
        System.out.println();
        // 300, 100, 200, 

        // ソートします。
        Arrays.sort( datas );
        for( int iF1 = 0; iF1 < datas.length; ++iF1 )
        {
            System.out.print( datas[iF1].i + ", " );
        }
        System.out.println();
        // 100, 200, 300, 

        // このソートの際に「Dataクラスの比較」が
        // 行われていて、そこでcompareTo()メソッドが
        // 使われています。
    }
}

/**
 * データクラス。
 * Comparableインターフェイスを実装します。
 */
class Data implements Comparable
{
    /**
     * フィールド。
     * この中の値で比較を行います。
     */
    public int i = 0;

    /**
     * コンストラクタ。
     */
    public Data( int i )
    {
        this.i = i;
    }

    /**
     * 比較用メソッドcompareTo()を実装します。
     * このメソッドがArraysクラスのsort()メソッド内で
     * 呼び出されて、各要素の比較が行われます。
     */
    public int compareTo( Object object )
    {
        // 引数に「配列のある一要素」が渡されるのでキャストします。
        Data data = (Data)object;
        // ちなみに自分自身(this)も「配列のある一要素」です。
        // このふたつを比較した結果を返します。

        return this.i - data.i;
        // プリミティブ型なら上記のように「this - object」が
        // 一番簡単でしょう。

        // クラスの場合はcompareTo()メソッドを、
        // プリミティブ型の場合にはラッパークラスの
        // compareTo()メソッドを使用するのがいいでしょう。
        // それが不可能な場合や、特別な結果を返す場合、
        // thisの方が「上」「前」「先」「小さい」「少ない」ならマイナス、
        // 一致してるなら0、それ以外はプラスを返す、としてもいいでしょう。
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2010/03/09
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。