java.util.Comparator

目的
オブジェクト配列のソートを行う

関連クラス

今回のソース
import java.util.*;

class Main
{
	private static final int ARRAY_SIZE = 10;
	private static final int RANGE = 100;

	public static void main(String args[])
	{
		Integer[] int_array = new Integer[ARRAY_SIZE];
		Random rnd = new Random();

		// 配列の初期化
		for(int i=0; i<ARRAY_SIZE; i++)
		{
			int_array[i] = new Integer(Math.abs(rnd.nextInt() % RANGE));
		}

		// 整列と結果表示
		System.out.println("-- First Time --");
		Arrays.sort(int_array);
		printIntArray(int_array);

		System.out.println("-- Second Time --");
		Arrays.sort(int_array, new IntCompare());
		printIntArray(int_array);
	}

	private static void printIntArray(Integer int_array[])
	{
		for(int i=0; i<int_array.length; i++)
		{
			System.out.println("Int_Value: " + int_array[i].intValue());
		}
	}
}

// Comparatorインタフェース実装クラス
// Integerオブジェクトを、降順に並べる。
class IntCompare implements Comparator
{
	// 比較用メソッド
	public int compare(Object o1, Object o2)
	{
		int i1 = ((Integer)o1).intValue();
		int i2 = ((Integer)o2).intValue();

		if(i2 < i1)
			return(-1);
		else if(i1 < i2)
			return(1);
		else
			return(0);
	}

	// Object.equalsをそのまま使用
	public boolean equals(Object obj)
	{
		return(super.equals(obj));
	}
}
Source is here. (ZIP Format, 755Byte, Shift-JIS)

コンパイル&実行
javac Main.java
java Main

説明
(概略)

Integerオブジェクトを、その値の降順に並べるようにしました。
Arrays.sortメソッドのデフォルトの動作は昇順なのに対して、
新しくComparatorを定義することで、降順にソート出来るようにしました。

(サンプルプログラムの説明)

Math.abs(rnd.nextInt() % RANGE)
これを、Math.abs(rnd.nextInt()) % RANGEと、
書いてはいけないということを言いたかっただけです。

Math.abs(Integer.MIN_VALUE)は、+2147483648にならなければおかしいのですが、
Integer.MAX_VALUEが、+2147483647のために表現出来ずに、
おかしなことになるのを防ぐためです。
Arrays.sort(int_array, new IntCompare());
メインのソート処理です。
配列のインスタンスと、比較メソッドcompareを実装した
IntCompareクラスのインスタンスを渡しています。
Object.equalsをそのまま使用
JDKのドキュメントを読むと、
パフォーマンス向上目的以外には、
新たに実装しない方が安全だということで、
それに従いました。