/** * Comparable2の実装について
*

Comparableは、インスタンスが自然順序を持っている事を示す。 * また、その比較メソッドcompareTo(Object)を実装しなければならない。

* @see java.lang.Comparable * * compareTo契約を破っている場合は、比較に依存するコレクションクラス、 * TreeSet,TreeMap,Collections,Arraysを正常に動作させる事が出来ない。 * */ package com.ej; /** * Comparable2の確認をするための比較テストクラス。 * valueフィールドにより整数比較がされる。 * Objectクラスのequalsの実装を追加 * ObjectクラスのhashCodeの実装を追加 * @author s-okita * @version 1.0 * @see java.lang.Comparable */ public class Compare2 implements Comparable { /** hashCode対象のフィールド */ private int value; private String name; public Compare2(int value, String name) { if (name == null) { throw new NullPointerException(); } this.value = value; this.name = name; } /** * @return nameフィールドを返す */ public String getName() { return name; } /** * @return hashCode対象のフィールドを返す */ public int getValue() { return value; } /** * @param string */ public void setName(String string) { name = string; } /** * @param i */ public void setValue(int i) { value = i; } /* * キャストできなければ、ClassCastExceptionが発生 * このオブジェクトと指定されたオブジェクトの順序を比較します。 * @param Object 指定されたオブジェクト * @return このオブジェクトが指定されたオブジェクトより小さい場合は負の整数、 * 等しい場合はゼロ、大きい場合は正の整数を返します。 * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo(Object o) { return compareTo((Compare2)o); } private int compareTo(Compare2 cmp) { int result = this.value - cmp.value; return (result != 0 ? result : 0); } /** * @param obj 対象となるオブジェクト * @return オブジェクトが等しいときにtrueを返す。それ以外はfalseを返す */ public boolean equals(Object obj) { if (obj == null) return false; if (obj instanceof Compare2) { if ((this.value == ((Compare2)obj).value)) { if(this.name.equals(((Compare2)obj).name)) { return true; } } } return false; } /** * ハッシュコード生成メソッド * 単純に素数を使ってハッシュコードを求めている。 * @return ハッシュコードを返す */ public int hashCode() { int result = 17; result = value * 37 + result; return result; } }