java.utilパッケージにあるArraysクラスには、Comparableインターフェイスを利用した sortやbinarySearchのメソッドが、用意されており、それを利用します。

既存のGenerics対応Comparable利用アルゴリズムを使う。
(Comparableインターフェイスを使うjava.util.Arrays.binarySearch利用)

右下のようなクラスがあり、それを使った実験用の配列を生成し、その配列を取得するため、 以下のクラスがあるとします。 (配列は、キーとなるshoの商品コードがバラバラに並ぶように変更しました。)
このgetData()で取得できる配列を商品コードで、昇順に整列後、B02を2分探索で検索する例を示します。

package rec;
import rec.Record2;
import rec.Record3;
public class Rec23Data{
	//実験用の配列を生成し、その配列を戻り値とするメソッド
	public static Record2[] getData(){
		Record2[] a = new Record2[]{ 
			new Record3("A02", 2, 200),
			new Record2("A01", 1),
			new Record2("A03", 3),
			new Record3("B01", 10,1000),
			new Record3("B02", 20,2000),
			new Record2("A04", 4),
			new Record2("B02", 30),
			new Record3("B03", 30,300),
		};
		return a;
	}
	// iStart から(iEnd-1)の添え字情報を表示
	public static void display(Record2[] a,int iStart,int iEnd){
		for (int i = iStart; i < iEnd; i++){
			a[i].display(i);
		}
	}

	public static void main(String[] arg){
		Record2[] a = Rec23Data.getData();
		Rec23Data.display(a, 0, 8);//確認用表示
	}
}

既存のアルゴリズムを使うには、Comparableインターフェイスを実装した配列要素にする必要があります。
JDK 1.5以上のGenerics版Comparableインターフェイスは次のようになっています。これ以前(JDK 1.4以下)の コードと比較ください。
(java.langパッケージは特別なパッケージで、このパッケージ内のクラスやインターフェイスはimportしなくても利用できます。)

package java.lang;
public interface Comparable<T> {
    public int compareTo(T o);
}

よって要素のクラスであるRecord2に、Comparableメソッドを実装します。 以下にその例を示します。
上記<T>利用する時<具体的名前>として、以下で<Record2>を指定しています。
同時にこれは、Record2を作る時の、 <総称的名前>として使っていることになります。


public class Record2 implements Comparable <Record2>
{
	・・・・・・省略・・・・
	
	public int compareTo(Record2 rec)
	{

		String s = rec.sho;

		//Stringの比較メソッドを利用した比較
		return sho.compareTo(s);
		
	}
	
	・・・・・・省略・・・・
}






このComparableが実装されたオブジェクトは、この比較方法に従って、 既にある java.util.Arrays.sortメソッドで昇順に並び替えることができ、 java.util.Arrays.binarySearchメソッドで2分探索ができます。 以下にその例を示します。
なおsortメソッドは、マージソートのアルゴリズムが使われます。

D:\java>java Test
   0番目レコード
        商品コード:A01
        数量:1
   1番目レコード
        商品コード:A02
        数量:2
        単価:200
   2番目レコード
        商品コード:A03
        数量:3
   3番目レコード
        商品コード:A04
        数量:4
   4番目レコード
        商品コード:B01
        数量:10
        単価:1000
   5番目レコード
        商品コード:B02
        数量:20
        単価:2000
   6番目レコード
        商品コード:B02
        数量:30
   7番目レコード
        商品コード:B03
        数量:30
        単価:300
B02 の商品コードは、次のように見つかりました
   5番目レコード
        商品コード:B02
        数量:20
        単価:2000

D:\java>h;

import rec.Record2;

public class Test
{
	public static void main(String[] arg)
	{
		//バラバラな配列取得
		Record2 [] a = rec.Rec23Data.getData();
		
		java.util.Arrays.sort(a);//並び替え
		
		rec.Rec23Data.display(a, 0, a.length);
		Record2 key = new Record2("B02", 0);
		
		//探索
		int iFound = java.util.Arrays.binarySearch(a, key);
		
		if (iFound == -1){
			System.out.println("見つかりません");
			System.exit(0);//実行終了
		}
		
		System.out.print("B02 の商品コードは、");
		System.out.println("次のように見つかりました");
		a[iFound].display(iFound);
	}
}


Comparableを実装したクラス

Stringは、Comparableを実装したクラスです。 よって上記と同じように、java.utilパッケージ内のArraysクラスのsortメソッド やbinarySearchメソッドが、すぐに利用できます。
それは以前に紹介しました。→利用例

Stringクラス以外にも、Comparableの実装クラスはたくさん用意されています。
Boolean、Character 、 Byte 、Short 、Integer 、 Long 、 Flort 、 Double などのクラスは、それぞれ
bool 、 char    、 byte 、short 、int   、 long 、 float 、 double の 基本型を包んだラップクラスで、Comparableインターフェイスが実装されています。
基本型は参照型でないためObjectの配列で管理できません。参照させる場合は、これらラッパークラスと呼ばれるオブジェクトで記憶します。 他にも、日時を管理するDateクラスが既に実装済みです。

Comparableインターフェイスを 下のリンクで確認しましょう。(インターフェイスもクラスと同じように調べることができます)