Java8 : ArrayList と 配列

単純な配列定義とデータ作成と表示

まずは配列の作成です。型として int ( プリミティブ )、String ( 文字列クラス )、User ( ユーザ作成クラス )の三種類でそれぞれ配列を作成してデータをセットして表示しています。データのセット方法としては、ループで配列一つ一つにセットする方法と、初期化子を使う方法と二つです。

表示には拡張 for を使用しています。

▼ 出力結果
0,1,2,
0,1,2,
a,b,c,
a,b,c,
a,b,c,
a,b,c,

【ASCIIコード表

a は 97(0x61) からです

01.public class Main {
02. 
03.        // 適当なユーザクラス
04.        static class User {
05.                public String stringValue;
06.                public User(String stringValue) {
07.                        this.stringValue = stringValue;
08.                }
09.        }
10. 
11.        public static void main(String[] args) {
12. 
13.                // new で配列を作成する場合の配列の数(サイズ)
14.                int numArray = 3;
15. 
16.                // ********************************
17.                // プリミティブ
18.                // ********************************
19.                int[] arrayBasicInt = new int[numArray];
20.                for( int i = 0; i < numArray; i++) {
21.                        arrayBasicInt[i] = i;
22.                }
23.                for (int value : arrayBasicInt) {
24.                        System.out.print(String.format("%d,",value));
25.                }
26.                 
27.                System.out.println();
28.                 
29.                // ********************************
30.                // プリミティブの初期化
31.                // ********************************
32.                int[] arrayInitInt = {0,1,2};
33.                for (int value : arrayInitInt) {
34.                        System.out.print(String.format("%d,",value));
35.                }
36. 
37.                System.out.println();
38.                 
39.                // ********************************
40.                // クラス
41.                // ********************************
42.                String[] arrayBasicString = new String[numArray];
43.                for( int i = 0; i < numArray; i++) {
44.                        arrayBasicString[i] = String.format("%c", i+97);
45.                }
46.                for (String value : arrayBasicString) {
47.                        System.out.print(String.format("%s,",value));
48.                }
49. 
50.                System.out.println();
51.                 
52.                // ********************************
53.                // クラスの初期化
54.                // ********************************
55.                String[] arrayInitString = {"a","b","c"};
56.                for (String value : arrayInitString) {
57.                        System.out.print(String.format("%s,",value));
58.                }
59. 
60.                System.out.println();
61. 
62.                // ********************************
63.                // 一般クラスの
64.                // ********************************
65.                User[] arrayBasicUser = new User[numArray];
66.                for( int i = 0; i < numArray; i++) {
67.                        arrayBasicUser[i] = new User(String.format("%c", i+97));
68.                }
69.                for (User value : arrayBasicUser) {
70.                        System.out.print(String.format("%s,",value.stringValue));
71.                }
72. 
73.                System.out.println();
74.                 
75.                // ********************************
76.                // 一般クラスの初期化
77.                // ********************************
78.                User[] arrayInitUser = {new User("a"),new User("b"),new User("c")};
79.                for (User value : arrayInitUser) {
80.                        System.out.print(String.format("%s,",value.stringValue));
81.                }
82.                 
83.        }
84. 
85.}

配列から ArrayList

いずれも、複数のデータを一つの型の中に持つ事ができる方法ですが、配列は作成された後変更する事ができないので、自分自身で実装する場合、通常は ArrayList に変換して使用する事になります。

Arrays.asList というクラスメソッドを用いて配列は List 型に変換できます。但し、そのままでは本来の目的である変更可能なコレクションでは無いので ArrayList のコンストラクタに再度渡して利用に値する ArrayList を取得します。

また、ArrayList には、forEach メソッドを使って一覧処理が可能です。拡張 for でも可能ですが、Map 型も同様に扱う事ができるので、最初は forEach で処理を作成しましょう。

▼ 出力結果
[令, 和, 元, 年]
[令, 和, 元, 年]
[令, 和, 元, 年]
令,和,元,年,
令,和,元,年,
01.import java.util.ArrayList;
02.import java.util.Arrays;
03.import java.util.List;
04. 
05.public class ListCheck {
06. 
07.        public static void main(String[] args) {
08.                 
09.                // ********************************
10.                // クラスの初期化
11.                // ********************************
12.                String[] arrayInitString = {"令","和","元","年"};
13.                System.out.println(Arrays.toString(arrayInitString));
14.                 
15.                // ********************************
16.                // ArrayList に変換
17.                // ********************************
18.                List<String> interFace = Arrays.asList(arrayInitString);
19.                 
20.                // ********************************
21.                // ① List を インターフェイス
22.                // に持つ ArrayList は List 型の
23.                // 変数に格納できる
24.                // ********************************
25. 
26.                // ********************************
27.                // ② Arrays.asList で取得された
28.                // List は 固定で変更できない
29.                // ( 配列と同じ特性 )
30.                // ********************************
31. 
32. 
33. 
34.                ArrayList<String> arrayListString = new ArrayList<String>(Arrays.asList(arrayInitString));
35.                System.out.println(arrayListString.toString());
36. 
37.                // ********************************
38.                // ③ 変更可能に変換する為に再度
39.                // ArrayList のコンストラクタへ
40.                // 渡して ArrayList を取得する
41.                // ********************************
42.         
43.         
44.         
45.                String[] arrayRebuildString = arrayListString.toArray(new String[0]);
46.                System.out.println(Arrays.toString(arrayRebuildString));
47. 
48.                // ********************************
49.                // ④ toArray メソッドで配列を
50.                // 作り直す事ができます
51.                // ********************************
52. 
53.         
54.         
55.                int size = arrayListString.size();
56.                for( int i = 0; i < size; i++ ) {
57.                        String stringValue = String.format("%s,", arrayListString.get(i) );
58.                        System.out.print(stringValue);
59.                }
60.                System.out.println();
61. 
62.                // ********************************
63.                // ⑤ ArrayList のメソッドを使用
64.                // してデータを取り出す
65.                // ********************************
66. 
67. 
68. 
69.                arrayListString.forEach(stringValue -> {
70.                        stringValue = String.format("%s,", stringValue );
71.                        System.out.print(stringValue);
72.                });
73.                System.out.println();
74. 
75.                // ********************************
76.                // ⑥ forEachメソッド を使用して
77.                // 結果をラムダ式で記述する
78.                // ********************************
79. 
80.                // ********************************
81.                // ⑦ HashMap の forEachメソッド
82.                // では、渡す値が二つになり、
83.                // かっこでくくる必要があります
84.                // ********************************
85. 
86.        }
87. 
88.}

ArrayList から配列の変換は、toArray メソッドで容易に行えます。


▼ 参考記事

配列の宣言・生成 ( Javaの道 )

配列とListの変換 ( 侍エンジニア塾ブログ )

toArray ( Oracle ArrayList )

Arrays.asList ( Oracle ) / fill / toString

Arrays.asList の罠 ( Qiita )

List⇔配列の相互変換 ( 侍エンジニア塾ブログ )

Java8のforEachとラムダ式を配列、List、Mapで使う ( 侍エンジニア塾ブログ )

拡張for文とJava8のforEachの使い方( 侍エンジニア塾ブログ )

インナークラス・メンバークラス ( Qiita )