トッカンソフトウェア

Java 配列


今回は配列をやります。


文字列→配列

文字列を指定文字で区切って配列にするときはsplitメソッドを使用します。
指定文字に.(ドット)など正規表現の文字と判断される場合、Pattern.quote()を使用します。
				
package test;

import java.util.regex.Pattern;

public class Test {
	public static void main(String[] args) {

		String str1 = "a,b,c";
		String str2 = "d.e.f";
		String[] strs1 = str1.split(",");
		for (String str : strs1) {
			System.out.println(str);
		}
		String[] strs2 = str2.split(Pattern.quote("."));
		for (String str : strs2) {
			System.out.println(str);
		}

	}
}


			
実行結果
				
 a
 b
 c
 d
 e
 f

			

配列のコピー

配列のコピー(新しい配列作成)はArrays.copyOfで行います。配列にオブジェクトが入っている場合、そのオブジェクト自体はコピーされません。
元の配列を同じオブジェクトを指します。

=では配列はコピーされず(新しい配列は作られず)、元の配列が別名になったような動作をします。
				
package test;

import java.util.Arrays;

public class Test {

	String str;

	public static void main(String[] args) {
		Test t1 = new Test();
		Test t2 = new Test();
		t1.str = "old";
		t2.str = "new";

		// 元となる配列を作成
		Test[] moto = new Test[1];
		moto[0] = t1;

		// 配列を新規作成して同じ参照先を参照
		Test[] copy = Arrays.copyOf(moto, moto.length);
		copy[0].str = copy[0].str + "+";
		
		// old+ が出力される
		System.out.println("コピー元も変更される:" + moto[0].str);

		// 配列を新規に作成しない。別名みたいな感じ
		Test[] same = moto;

		// moto[0] = t2と同じ動作
		same[0] = t2;

		// new が出力される
		System.out.println("moto:" + moto[0].str);

		// old+ が出力される(Arrays.copyOfで配列をコピーしたため新規に配列が作成された)
		System.out.println("copy:" + copy[0].str);

		// new が出力される
		System.out.println("same:" + same[0].str);
	}
}


			
実行結果
				
 コピー元も変更される:old+
 tsMoto:new
 tsCopy:old+
 tsSame:new

			

配列⇔リスト変換

配列からリストに変換する場合、 Arrays.asListを使用します。
リストから配列に変換する場合、 List.toArrayを使用します。
				
package test;

import java.util.Arrays;
import java.util.List;

public class Test {

	public static void main(String[] args) {

		// 配列を作成
		String[] strs = { "あ", "い", "う" };

		// 配列→リスト変換
		List<String> list = Arrays.asList(strs);

		// リスト変換→配列
		String[] strsNew = list.toArray(new String[list.size()]);

		for (String str : strsNew) {
			System.out.println(str);
		}
	}
}


			



ページのトップへ戻る