Java学習 自分用Listインターフェースの主要な共通メソッドの挙動確認。
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Rist {
public static void show(List<String> list) {
System.out.println("+-------------------------");
System.out.println();
for(String show : list) {
System.out.println(show);
}
System.out.println();
System.out.println("+-------------------------");
}
public static void start() {
System.out.println("+-------------------------");
System.out.println();
}
public static void end() {
System.out.println();
System.out.println("+-------------------------");
}
public static void Syugou() {
//Listの主要メソッドの挙動を確認します。
//ListはインターフェースなのでArrayListインスタンスを右辺から代入
//Listは可変長配列なので、要素数を決める必要がありません。
List<String> list = new ArrayList<>();
//list.add(E e)listの最後に要素を追加します。
list.add("name");
String name = "TanakaTarou";
list.add(name);
show(list);
//list.add(index , E)指定した要素番号の位置に要素を追加します。
String plus = "ここに追加した";
list.add(1 , plus);
list.add(3 , plus);
//indexを指定して追加する場合、連続しなければいけない。
//0,1に要素がある状態なら2に追加しないと実行時エラー。
//つまり、0,1に要素がある時いきなり100には追加できない。
show(list);
//list.clearは要素の全削除
list.clear();
show(list);
//今後のためにlistに要素を追加
list.add("モンスターエナジー");
list.add("レッドブル");
list.add("ZONE");
//list.contains(要素)は要素がlistに含まれているかを確認し真偽値を返す
System.out.println("-------------------------");
System.out.println();
System.out.println(list.contains("モンスターエナジー"));
//部分一致は検索していない
System.out.println(list.contains("モンスター"));
System.out.println(list.contains("リポビタンD"));
System.out.println();
System.out.println("-------------------------");
//listのディープコピーを作成する方法
//プリミティブ型のディープコピー
List<String> list2 = new ArrayList<>(list);
show(list);
show(list2);
//オブジェクト型やインスタンスのディープコピー
List<Date> date = new ArrayList<>();
date.add(new Date());
date.add(new Date());
date.add(new Date());
//拡張for文で一括コピー
List<Date> date2 = new ArrayList<>();
for(Date copy : date) {
date2.add(copy);
}
System.out.println("-------------------------");
System.out.println();
//中身の確認
//ついでにlist.getで指定した要素番号の中身を取り出す
for(int i = 0; i < date.size(); i++) {
System.out.println("date1 : " + date.get(i));
System.out.println("date2 : " + date2.get(i));
}
System.out.println();
System.out.println("-------------------------");
start();
//list.indexOf()は何番目に要素があるか返します。
System.out.println(list.indexOf("ZONE"));
end();
//list.Empty()はlistの中に要素があるかを真偽値で返します
//ない場合がtrue
start();
System.out.println(list.isEmpty());
//if文での真偽値判定にも利用可能
System.out.println("isEmptyは中身があるかないかのチェックには使えます");
System.out.println();
if(list.isEmpty() == false) {
System.out.println("このリストには中身があります");
}
System.out.println();
//nullチェックは可能か
List<Object> check = new ArrayList<>();
check.add(null);
System.out.println("中身がnullだけのListにも " + check.isEmpty() + "を返します");
System.out.println("なのでnullチェックには向きません");
end();
start();
list.add("モンスターエナジー");
list.add("リアルゴールド");
list.add("モンスターエナジー");;
//listの中で指定された要素がある最後の場所をを返します
System.out.println(list.lastIndexOf("モンスターエナジー"));
//存在しない場合は-1を返します
System.out.println(list.lastIndexOf("トマトジュース"));
end();
//remove(index)は指定した番号の要素を消します
//remove(Object)でも削除できます
start();
show(list);
System.out.println(list.remove(1) + "を消します");
show(list);
System.out.println(list.remove("モンスターエナジー") + "文字列指定でも消せます");
show(list);
end();
//removeAll()は共通した部分を削除します。
start();
System.out.println("list1の中身はこれです");
show(list);
System.out.println("list2の中身はこれです");
show(list2);
System.out.println("list2の中にあるものだけlist1から消します");
list.removeAll(list2);
System.out.println("消しました");
System.out.println("list1の中身はこうなりました");
show(list);
System.out.println("これがremoveAllです");
end();
//retainAllは同じものだけ残します
start();
list.add("モンスターエナジー");
System.out.println("list1の中身はこれです");
show(list);
System.out.println("list2の中身はこれです");
show(list2);
System.out.println("同じものだけ残したlist1を作ります");
list.retainAll(list2);
System.out.println("こうなりました");
show(list);
end();
//set(index , Obj)で入れ替えができます
start();
show(list2);
System.out.println("setでレッドブルを他の飲み物に変えます");
list2.set(1, "ZoneUmamusumeEdition");
show(list2);
System.out.println("こうなりました");
System.out.println("モンエナとZONEの場所を入れ替えます");
String tmp = list2.get(0);
list2.set(0, list2.get(1));
list2.set(1, tmp);
show(list2);
System.out.println("tmp変数に0を一度保存した後、getで0番に1番を代入");
System.out.println("1にtmpを代入したらOKです");
end();
//subListは範囲内の要素を表示します
start();
System.out.println("0~1をsubListで切り出します。");
System.out.println("subStringと同じ切り出し方です");
System.out.println(list2.subList(0, 1));
List<String> list3 = new ArrayList<>(list2);
start();
System.out.println("今のlist2の状態");
end();
show(list2);
System.out.println("subStringで切り出した範囲をclear removeAllできます");
list2.subList(0, 1).clear();
System.out.println("list2.subList(0, 1).clear();");
show(list2);
start();
System.out.println("今のlist3の状態");
end();
show(list3);
list3.removeAll(list3.subList(1,2));
System.out.println("list3.removeAll(list3.subList(1,2));");
show(list3);
end();
//list.size()で要素数を返してくれます。
start();
System.out.println(list2.size());
end();
//toArray(型指定)で配列に変えられます。
String[] array = new String[list2.size()];
list2.toArray(array);
System.out.println("listを配列に変えました");
for(String show : array) {
System.out.println(show);
}
}
}
メモ。
プリミティブ型のディープコピーは通常のインスタンス生成時に既存のlistを渡せばよい。
オブジェクトをコピーしたい時は、拡張for文で回す。
removeAllは共通部分の削除に便利。
subListはclearやremoveAllにも渡せる。
この記事が気に入ったらサポートをしてみませんか?