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);
}
}
}
ページのトップへ戻る