Arrays#deepEquals
Arrays#deepEquals()で配列要素の再帰的な比較ができます。
Object a = new Object(); Object b = new Object(); Object c = new Object(); // 配列 System.out.println( Arrays.deepEquals( new Object[] {a,b}, new Object[] {a,b} )); // true System.out.println( Arrays.deepEquals( new Object[] {a,b}, new Object[] {a,c} )); // false // 配列の配列 System.out.println( Arrays.deepEquals( new Object[][] {new Object[] {a,b}, new Object[] {a,b}}, new Object[][] {new Object[] {a,b}, new Object[] {a,b}})); // true System.out.println( Arrays.deepEquals( new Object[][] {new Object[] {a,b}, new Object[] {a,b}}, new Object[][] {new Object[] {a,b}, new Object[] {a,c}})); // false
実行結果です。
true false true false
以前に書いたオブジェクト比較ユーティリティの代わりに使えます。Object#equalsも↓のような感じでOK。
class Kitten { // フィールド private String name; private int age; public boolean equals ( Object obj ) { if ( obj == null ) { return false; } if ( obj instanceof Kitten ) { Object[] that = getValues((Kitten) obj); return Arrays.deepEquals(that, getValues(this)); } return false; } public int hashCode () { return Arrays.deepHashCode(getValues(this)); } // 比較するフィールドを返す関数 // equals(),hashcode()の比較対象をここに集約する。 private static Object[] getValues(Kitten v) { return new Object[] { // 比較するフィールド値をここに並べる。 v.name, v.age }; } }