配列

  1. java の配列
  2. 配列の例
  3. 例1
  4. 例2
  5. 例3

  1. java の配列
  2. 配列は複数の要素を整列して扱えます。 配列の要素は基本タイプあるいは、オブジェクトへの参照です。 もちろん、他の配列への参照を含んでよい。

    配列の添字 0からはじまる正整数で int によって参照されるので、最大 2147483647 です。

    配列の要素数は宣言時ではなく、new による生成時に決定されます。 従って配列オブジェクトの長さは、生成時に固定され変更できません。 配列の添字による参照は、すべて実行時にチェックされます。 添字が配列の要素外を参照しようとすると、 ArrayIndexOutOfBoundsException 例外が起こり、プログラムの実行を止めます。

    配列には、以下のオブジェクトらしい点がありますが、 クラスではないのでオブジェクトではありません。

    配列の宣言

    配列は、[] をつければ宣言できます。 サイズを指定しないことに注意してください。

    [] のペアは、要素の型の次にあってもよいし、変数名の次にあってもよいです。

    もし括弧が型の次にあればそれは型の一部であり、 その宣言にあるすべての変数に適応されます。

    次の2行は同じです。

       String []   a,b,c[];
       String      a[],b[],c[][];
    

    配列の要素数は、宣言時ではなく new による生成時に決定されます。 サイズが決定すると、以降は配列名.length で配列サイズがえられます。

    配列の初期化

    配列を初期化するには、中括弧でまとめて値を宣言時に代入します。

    多次元配列

    それぞれの次元を別々にインスタンシエイトするには、 最高位の次元を最初にインスタンシエイトしなければなりません。

    ただし java では、これを配列の配列とよびます。

    配列のコピー

    java.lang.System.arraycopy() メソッドを使うと、 配列の一部または全部をコピーできます。

       int beer[] = {11,12,13,14,15,16,17,18,19};
       int cpyto[];
    
       cpyto = new int[beer.length];
       System.arraycopy(beer,0,cpyto,0,beer.length);
    

  3. 配列の例
  4. int   a[]={0,1,2,3,4,5};
    int [] b = {a.length,2,3,};
    
    char  c[][]= new char[12][31];
    char [] d [] = {{1,1,1,1},{2,2,2,2}};     // creates d[2][4]
    char [][] e;
    
    short[]  h,i[],j,k[][];      //  all varibales are array
            // h[]
            // i[][] 
            // j[]
            // k[][][]
    int aaa[][] = new int[5][];     // OK
    int bbb[][] = new int[5][3];    // OK
    
    int ccc[][] = new int[][3];     // NG
    

  5. 例1
  6. class Ary {
    
       public static void main(String[] a) {
          int   eggs[]={1,2,3,4,};
          int   hams[]={10};
    
          hams    = eggs;
          hams[3] = 1;        // OK,because hams now has 4 elements
    
          System.out.println("Length of hams =" + hams.length);
    
          String       s = "Soft cream";
          String       s1=  new String("Banana");
          StringBuffer sb=  new StringBuffer();
    
          sb = sb.append("Rock ").append("Ice");
          System.out.println("Length of String       s =" + s.length());
          System.out.println("Length of StringBuffer sb=" + sb.length());
       }
    }
    

  7. 例2
  8. // array declarations, simple and exotic
    
    class test5a {
    
      public static void main (String [] ar) {
          int a [] = {'a'} ;
          System.out.println("a.length=" + a.length );
          int b [] = new int[100];
          int c [] = {b.length, b.length } ;
          char d[];
          char [] e;
    
          byte    []    []  []f1;
          byte    []    []f2[];
          byte    [] f3 []  [];
          byte f4 []    []  [];
          System.out.println("int a = "+a[0]);
      }
    }
    

  9. 例3
  10. // show the "floating" array brackets
    // show how to return an array from a method.
    // show a runtime array bounds exception
    
    class test5b {
    
      public static void main (String [] ar) {
          int a [] = {'a'} ;
          int [] b = { a.length, 2, 3 } ;
    
          char c [][] = new char[12][31];
          char[] d [] = { {1,1,1,1}, {2,2,2,2} }; // creates d[2][4]
          char[][] e  = { {1,1,1,1}, {2,2,2,2} }; // creates e[2][4]
    
          byte f [][][] = new byte [3][3][7];
          byte [][] g[] = new byte [3][3][7];
    
          System.out.println("a.length=" + a.length );
          b= ginger();
          b[19] =0;
          System.out.println("b.length=" + b.length );
          b[20] =0;   // causes a runtime exception
       }
    
       static  int garlic () [][] { return new int[5][2]; }
       static  int [] ginger ()  { return new int[20]; }
       static  int [] gruel () []  { return new int[20][3]; }
    }
    

    例1から3を作って実行してみましょう。





まとめ

配列の宣言     タイプ [] 配列名 または  タイプ 配列名 []
配列の初期化 タイプ [] 配列名 = { 初期値 }
配列の生成 タイプ [] 配列名 = new タイプ [ サイズ ]
配列のサイズ 配列名.length
配列の例外 ArrayIndexOutOfBoundsException