意外と役立つArrayとArrays

配列内のデータの比較をするためにこんな感じのメソッドを書書きたくなることがある?!

public static boolean compare(Integer[] a, Integer[] b) {
    if (a.length != b.length) {
        return false;
    }
    for (int i = 0; i < a.length; i++) {
        if (!a[i].equals(b[i]) {
            return false;
        }
    }
    return true;
}

これは実はArrays.equals(ary1, ary2)とやれば一文で終わる。
このArrays.equalsはかなり強力で、例えば、ジェネリック型のType配列なんかも比較できます。
フレームワークを作っている場合どうしてもタイプセーフチェックを行うロジックを入れなきゃいけなくなって、例えばParameterizedType.getActualTypeArgumentsの戻り値のType配列をチェックしたい場合にも利用できます。

Type[] types1 = parameterizedType1.getActualTypeArguments();
Type[] types2 = parameterizedType2.getActualTypeArguments();

return Arrays.equals(types1, types2);


あと、ついでにArrayクラスのnewInstanceメソッドを使うとクラスから任意の長さの配列を作成できます。

Integer[] ary = (Integer[])Array.newInstance(Integer.class, 5);

これは例えば、作る配列の型が実行時に決まるような場合に役立つかと思います。

特にアプリ基盤なんかを作る際には便利かも。