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にも渡せる。

この記事が気に入ったらサポートをしてみませんか?