【Java】 配列 に関するあれこれ

配列いろいろ

■ 配列の内容を出力するには

* Arrays.deepToString() を使う
Object[] values = ...;
Arrays.deepToString(values);

■ 配列かどうか判定するには

* getClass().isArray() で判定する
Object value = ...;
if (value.getClass().isArray()) {
    System.out.println("配列である");
} else {
    System.out.println("配列でない");
}

■ 2次配列以上かどうか判定するには

* getClass().getComponentType()とisArray()を組み合わせる
Object value = ...;
if (value.getClass().isArray()) {
    if (value.getClass.getComponentType().isArray()) {
         System.out.println("2次配列である");
    } else {
         System.out.println("1次配列である");
    }
} else {
    System.out.println("配列でない");
}

API仕様

* isArray() : この Class オブジェクトが配列クラスを表すかどうかを判定 '
http://docs.oracle.com/javase/jp/6/api/java/lang/Class.html#isArray()
* getComponentType() : 配列のコンポーネント型を表す Class を返す。このクラスが配列クラスを表さない場合、このメソッドは null を返す '
http://docs.oracle.com/javase/jp/6/api/java/lang/Class.html#getComponentType()

ArrayList <=> 配列に変換するには

* Listとの相互変換については、以下の関連記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/32156111.html

サンプル

import java.util.Arrays;

public class ArrayUtil {

   public static void main(String[] args) {
      String[] target1Values = new String[] { "test1", "test2" };
      System.out.println(ArrayUtil.getArrayString(target1Values));
      System.out.println("target1Values : " + ArrayUtil.isArray(target1Values));
      System.out.println("Dimentsion of target1Values : "
            + ArrayUtil.getDimensionNumber(target1Values));

      System.out.println();
      
      String target2Value = "test";
      System.out.println("target2Value : " + ArrayUtil.isArray(target2Value));
      System.out.println("Dimentsion of target2Value : "
            + ArrayUtil.getDimensionNumber(target2Value));

      System.out.println();
      
      String[][] target3Values = new String[][] { { "test1-1", "test1-2" },
            { "test2-1", "test2-2" } };
      System.out.println(ArrayUtil.getArrayString(target3Values));
      System.out.println("target3Values : " + ArrayUtil.isArray(target3Values));
      System.out.println("Dimentsion of target3Values : "
            + ArrayUtil.getDimensionNumber(target3Values));

      System.out.println();
      
      String[][][][] target4Values = new String[][][][] {
            {
                  { { "aaa", "bbb" }, { "ccc", "ddd" },
                        { "eee", "fff" } },
                  { { "ggg", "hhh" }, { "iii", "jjj" },
                        { "kkk", "lll" } } },
            {
                  { { "mmm", "nnn" }, { "ooo", "ppp" },
                        { "qqq", "rrr" } },
                  { { "sss", "ttt" }, { "uuu", "vvv" },
                        { "www", "xxx" } } },
            {
                  { { "yyy", "zzz" }, { "AAA", "BBB" },
                        { "CCC", "DDD" } },
                  { { "EEE", "FFF" }, { "GGG", "HHH" },
                        { "III", "JJJ" } } },
            {
                  { { "KKK", "LLL" }, { "MMM", "NNN" },
                        { "OOO", "PPP" } },
                  { { "QQQ", "RRR" }, { "SSS", "TTT" },
                        { "UUU", "VVV" } } } };
      System.out.println(ArrayUtil.getArrayString(target4Values));
      System.out.println("target4Values : " + ArrayUtil.isArray(target4Values));
      System.out.println("Dimentsion of target4Values : "
            + ArrayUtil.getDimensionNumber(target4Values));
   }

   public static String getArrayString(Object[] values) {
      return Arrays.deepToString(values);
   }
   public static boolean isArray(Object value) {
      if (value == null) {
         return false;
      }
      return value.getClass().isArray();
   }

   public static int getDimensionNumber(Object value) {
      if (!ArrayUtil.isArray(value)) {
         return 0;
      }
      int dimensionNumber = 1;
      return ArrayUtil.getDimensionNumber(value.getClass().getComponentType(),
            dimensionNumber);
   }

   private static int getDimensionNumber(Class<?> targetClass,
         Integer dimensionNumber) {
      if (targetClass == null || !targetClass.isArray()) {
         return dimensionNumber;
      }
      dimensionNumber = dimensionNumber + 1;
      return ArrayUtil.getDimensionNumber(targetClass.getComponentType(),
            dimensionNumber);
   }
}

出力結果

[test1, test2]
target1Values : true
Dimentsion of target1Values : 1

target2Value : false
Dimentsion of target2Value : 0

[[test1-1, test1-2], [test2-1, test2-2]]
target3Values : true
Dimentsion of target3Values : 2

[[[[aaa, bbb], [ccc, ddd], [eee, fff]], [[ggg, hhh], [iii, jjj], [kkk, lll]]], [[[mmm, nnn], [ooo, ppp], [qqq, rrr]], [[sss, ttt], [uuu, vvv], [www, xxx]]], [[[yyy, zzz], [AAA, BBB], [CCC, DDD]], [[EEE, FFF], [GGG, HHH], [III, JJJ]]], [[[KKK, LLL], [MMM, NNN], [OOO, PPP]], [[QQQ, RRR], [SSS, TTT], [UUU, VVV]]]]
target4Values : true
Dimentsion of target4Values : 4

関連記事

コレクション ~ List 編~

http://blogs.yahoo.co.jp/dk521123/32156111.html