JavaのArrayListを使いこなす

  • 2020年2月1日
  • 2020年6月16日
  • Java
Javaコーディングでよく登場するArrayListクラスですが、DBの取得結果をbeanにいれてaddみたいな使われ方をすることが多そうなのでそれ以外のメソッドを5つほどサンプルコードとともに紹介したいと思います。バージョンは1.8です。

 

紹介するメソッドは以下
・clear()
・addAll(Collection<? extends E> c)
・addAll(int index, Collection<? extends E> c)
・removeAll(Collection<?> c)
・forEach(Consumer<? super E> action)

 

clear()
clearはリスト内の全ての要素を削除します。

public static void main(String[] args) {

List list = new ArrayList<>(Arrays.asList("j","a","v","a"));

System.out.println("クリア前のサイズ:" + list.size());
list.clear();
System.out.println("クリア後のサイズ:" + list.size());

}

出力結果

クリア前のサイズ:4
クリア後のサイズ:0

 

addAll(Collection<? extends E> c)
addAll(Collection<? extends E> c)は、引数に渡されたコレクションを呼び出し元のリストの最後に追加します。

	public static void main(String[] args) {

		List list1 = new ArrayList<>(Arrays.asList("1","2","3"));
		List list2 = new ArrayList<>(Arrays.asList("4","5","6"));

		System.out.print("addAllする前のlist1内の要素:");
		for (String element : list1) {
			System.out.print(element);
		}

		list1.addAll(list2);

		System.out.print("\r\n" + "addAllした後のlist1内の要素:");
		for (String element : list1) {
			System.out.print(element);
		}

	}

出力結果

addAllする前のlist1内の要素:123
addAllした後のlist1内の要素:123456

 

addAll(int index, Collection<? extends E> c)
addAll(int index, Collection<? extends E> c)は、1つ目の引数は呼び出し元のリストの位置を指定し、2つ目に引数のコレクションをその位置から追加します。

	public static void main(String[] args) {

		List list1 = new ArrayList<>(Arrays.asList("1","2","6"));
		List list2 = new ArrayList<>(Arrays.asList("3","4","5"));

		System.out.print("addAllする前のlist1内の要素:");
		for (String element : list1) {
			System.out.print(element);
		}

		System.out.print("\r\n" + "list1の12と6の間にいれるlist2の要素:");
		for (String element : list2) {
			System.out.print(element);
		}

		list1.addAll(2, list2);

		System.out.print("\r\n" + "addAllした後のlist1内の要素:");
		for (String element : list1) {
			System.out.print(element);
		}

	}

出力結果

addAllする前のlist1内の要素:126
list1の12と6の間にいれるlist2の要素:345
addAllした後のlist1内の要素:123456

 

removeAll(Collection<?> c)
removeAll(Collection<?> c)は、呼び出し元のリストと引数のコレクション内の同じ要素を削除します。

	public static void main(String[] args) {

		List list1 = new ArrayList<>(Arrays.asList("1","2","3","4","5","6"));
		List list2 = new ArrayList<>(Arrays.asList("4","5","6"));

		System.out.print("removeAllする前のlist1内の要素:");
		for (String element : list1) {
			System.out.print(element);
		}

		list1.removeAll(list2);

		System.out.print("\r\n" + "removeAllした後のlist1内の要素:");
		for (String element : list1) {
			System.out.print(element);
		}

	}

出力結果

removeAllする前のlist1内の要素:123456
removeAllした後のlist1内の要素:123

 

forEach(Consumer<? super E> action)
forEach(Consumer<? super E> action)は、リストを繰り返し、要素にアクションを実行します。ただ、actionがこのループ外の変数を値を変える処理は記述することができません。なので使うタイミングとしてはただ出力したいといった時など、変数への代入が発生しない時に使うといいでしょう。例えばリスト内の要素を全て出力したいときは1行の記述で済みます。同じ処理をfor文で1行で書くこともできますが、慣習的に改行して記述することが多いので見た目はfor文よりもシンプルに書くことができるでしょう。

	public static void main(String[] args) {

		List list1 = new ArrayList<>(Arrays.asList("1","2","3","4","5","6"));

		System.out.print("list1内の要素を出力:");
		list1.forEach(element -> System.out.print(element));

		System.out.print("\r\n" + "list1内の要素を出力:");
		for (String element : list1) {
			System.out.print(element);
		}

	}

出力結果

list1内の要素を出力:123456
list1内の要素を出力:123456

action処理で変数への代入をしようとするとコンパイルエラーが発生

	public static void main(String[] args) {

		List list1 = new ArrayList<>(Arrays.asList("1","2","3","4","5","6"));
		String str = "文字列";

		// コンパイルエラー
		list1.forEach(element -> str = element);

	}