Javaリストでadd()およびaddAll()メソッドを使用する方法について
導入
この記事では、JavaのListメソッドであるadd()とaddAll()について学びます。
JavaのListのadd()メソッドを日本語で言い換えると:「JavaのListのadd()メソッドを使用すると、要素をリストに追加することができます。」
リストに要素を追加するためにこの方法が使用されます。リストに要素を追加するための方法は2つあります。
-
- add(E e): リストの末尾に要素を追加します。Listはジェネリクスをサポートしているため、リストの作成時に追加できる要素の型が決定されます。
- add(int index, E element): 指定されたインデックスに要素を挿入します。指定されたインデックスからの要素はリストの右側にシフトされます。与えられたインデックスが範囲外の場合、このメソッドはIndexOutOfBoundsExceptionをスローします。
以下は、Listのadd()メソッドの例です。
package com.scdev.examples;
import java.util.ArrayList;
import java.util.List;
public class ListAddExamples {
public static void main(String[] args) {
List<String> vowels = new ArrayList<>();
vowels.add("A"); // [A]
vowels.add("E"); // [A, E]
vowels.add("U"); // [A, E, U]
System.out.println(vowels); // [A, E, U]
vowels.add(2, "I"); // [A, E, I, U]
vowels.add(3, "O"); // [A, E, I, O, U]
System.out.println(vowels); // [A, E, I, O, U]
}
}
最初に、このコードはリストにA、E、Uを追加し、[A、E、U]を出力します。
次に、このコードは2番目のインデックスにIを追加して[A, E, I, U]を生成します。それから、3番目のインデックスにOを追加して[A, E, I, O, U]を生成します。最後に、このリストが画面に出力されます。
JavaのListのaddAll()メソッドを日本語で言い換えると「JavaのリストにaddAll()メソッドを追加する」となります。
このメソッドは、コレクションから要素をリストに追加するために使用されます。オーバーロードされたaddAll()メソッドが2つあります。
-
- addAll(Collection<? extends E> c): このメソッドは、与えられたコレクションのすべての要素をリストの末尾に追加します。挿入の順序は、コレクションイテレータがそれらを返す順序に依存します。
- addAll(int index, Collection<? extends E> c): このメソッドを使用することで、指定したインデックスにコレクションから要素を挿入することができます。リスト内のすべての要素は右にシフトされ、コレクションからの要素のためにスペースが作成されます。
ListのaddAll()メソッドのいくつかの例を以下に示します。
package com.scdev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListAddAllExamples {
public static void main(String[] args) {
List<Integer> primeNumbers = new ArrayList<>();
primeNumbers.addAll(Arrays.asList(2, 7, 11));
System.out.println(primeNumbers); // [2, 7, 11]
primeNumbers.addAll(1, Arrays.asList(3, 5));
System.out.println(primeNumbers); // [2, 3, 5, 7, 11]
}
}
まず、このコードは[2, 7, 11]の値を持つ新しいリストを作成します。そして、このリストが画面に出力されます。
次に、値が[3, 5]の2番目のリストが作成されます。次に、この2番目のリストが1番目のインデックスを指定して最初のリストにaddAll()されます。これにより、[2, 3, 5, 7, 11]のリストが画面に出力されます。
リストのadd()メソッドにはUnsupportedOperationExceptionがあります。
Listのadd()およびaddAll()メソッドのドキュメントには、この操作はオプションとして記載されています。つまり、リストの実装がサポートしていない場合があります。この場合、リストのadd()メソッドはUnsupportedOperationExceptionをスローします。要素をリストに追加する際にこの例外が発生する一般的なシナリオは2つあります。
-
- Arrays.asList(): このメソッドは、指定された配列によってバックアップされているため、固定サイズのリストを返します。リストのサイズが変更される操作は、UnsupportedOperationExceptionをスローします。
- Collections.unmodifiableList(List l): このメソッドは、指定されたリストの変更不能なビューを返します。そのため、add()操作はUnsupportedOperationExceptionをスローします。
固定サイズリストにおけるadd操作でのUnsupportedOperationExceptionの例を以下に示します。
jshell> List<Integer> ints = Arrays.asList(1,2,3);
ints ==> [1, 2, 3]
jshell> ints.add(4);
| Exception java.lang.UnsupportedOperationException
| at AbstractList.add (AbstractList.java:153)
| at AbstractList.add (AbstractList.java:111)
| at (#4:1)
最初に、このコードは[1、2、3]の固定サイズリストを作成します。次に、このコードはリストに4を追加しようとします。これにより、UnsupportedOperationExceptionがスローされます。
与えられたリストの変更不可ビューにadd操作を行った場合のUnsupportedOperationExceptionの例です。
jshell> List<String> strs = new ArrayList<>();
strs ==> []
jshell> strs.add("A");
$6 ==> true
jshell> List<String> strs1 = Collections.unmodifiableList(strs);
strs1 ==> [A]
jshell> strs1.add("B");
| Exception java.lang.UnsupportedOperationException
| at Collections$UnmodifiableCollection.add (Collections.java:1058)
| at (#8:1)
最初に、このコードはAをリストに追加します。次に、このコードは前のリストの変更不可ビューにBを追加しようと試みます。その結果、UnsupportedOperationExceptionがスローされます。
結論
この記事では、JavaのListのメソッドであるadd()とaddAll()について学びました。
おすすめの読書:
- Java List
- Java ArrayList
参考文献:
- List API Docs
- StackOverflow Question