ループを使った要素へのアクセス
for文などのループ処理を使って要素へアクセスする方法について解説します。
iteratorを使ったfor文
Listインターフェースを実装するクラスでは、iteratorメソッドを使ってIterator型のオブジェクトを使用することができるようになります。
Iterator型のオブジェクトからはhasNextメソッドやnextメソッドを呼び出して利用できます。
hasNextメソッドは、リストが次の要素を持っている場合にtrueを返します。nextメソッドはリストの次の要素を返します。
Listインターフェースを実装するクラスには、例えばArrayListクラスなどがあります。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for(Iterator it = list.iterator(); it.hasNext();) {
System.out.println(it.next());
}
}
}
実行結果:
1
2
3
4
iteratorメソッドの使い方についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。
【3分でわかるJavaの基礎】List内のデータをfor文で処理する方法(iterator)
更新日 : 2017年6月7日
forEachメソッド
Java8で追加されたforEachメソッドとラムダ式を使うと、リストの要素全てにアクセスする場合に簡潔に記述することができます。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
// 拡張for文
for(String s : list) {
System.out.println(s);
}
// forEachメソッド
list.forEach(System.out::println);
}
}
実行結果:
a
b
c
a
b
c
forEachメソッドの使い方についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。
【Java入門】Java8のforEachとラムダ式を配列、List、Mapで使う
更新日 : 2019年5月4日
Listのメソッドの使い方
Listインターフェースにはたくさんのメソッドが用意されています。メソッドを表にまとめました。
メソッド | 説明 | 記述例 |
add | リストに値を追加 | list.add(1) |
addAll | リストにリストを追加 | list1.add(list2) |
set | リストの値を変更 | list.set(0, 3) |
get | リストの値を取得 | list.get(0) |
size | リストの要素数を取得 | list.size() |
indexOf | リストから値の要素番号を取得 | list.indexOf("a") |
subList | リストから範囲を指定してコピー | subList(1, 3) |
contains | リストに値が含まれるか判定 | list.contains("a") |
remove | リストから指定する要素番号の値を削除 | list.remove(1); |
distinct | リストで重複する値を削除 | list.stream().distinct() |
clone | リストのコピー | list.clone() |
それぞれのメソッドの使い方についてみていきましょう。
add, addAllで要素を追加する方法
addメソッドはリストに値を追加する場合に使用します。
addAllメソッドはあるリストに別のリストを追加する場合に使用します。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
System.out.println(list1);
List<Integer> list2 = new ArrayList<>();
list2.add(5);
list2.add(6);
list2.add(7);
list2.add(8);
list1.addAll(list2);
System.out.println(list1);
}
}
実行結果:
[1, 2, 3, 4]
[1, 2, 3, 4, 5, 6, 7, 8]
addメソッド、addAllメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。
【3分でわかるJavaの基礎】Listにデータを追加する方法(add,addAll)
更新日 : 2017年6月7日
setで要素を書き換える方法
setメソッドはリストの要素を書き換える場合に使用します。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for(int i = 0; i < 5; i++) {
list.add(i);
}
list.set(0, 3);
System.out.println(list);
}
}
実行結果:
[3, 1, 2, 3, 4]
setメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。
【Java入門】簡単!Listクラスのsetメソッドの使い方
更新日 : 2019年1月23日
getで要素の値を取得する方法
getメソッドは要素の値を取得する場合に使用します。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
//listにデータ追加する
list.add("apple");
list.add("orange");
list.add("melon");
System.out.println(list.get(0));
}
}
実行結果:
apple
getメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。
【3分でわかるJavaの基礎】Listのデータを取得する方法(get)
更新日 : 2020年9月28日
sizeで要素数を取得する方法
sizeメソッドはリストの要素数を取得する場合に使用します。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
System.out.println("list = " + list);
System.out.println("要素数 = " + list.size());
}
}
実行結果:
list = [s, a, m, u, r, a, i]
要素数 = 7
sizeメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。
【3分Java入門】Listのsizeメソッドで要素数を知る!
更新日 : 2019年6月4日
indexOfで要素の位置を検索する方法
indexOfメソッドは指定した値がリスト内のどこに位置するか検索する場合に使用します。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
int index = list.indexOf("a");
System.out.println("要素番号 = " + index);
}
}
実行結果:
要素番号 = 1
indexOfメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。
【Java入門】indexOfとlastIndexOfで文字列を検索する(List/String)
更新日 : 2018年11月12日
subListでListの一部をコピーする方法
subListはリスト内の範囲を指定し、範囲内のリストで新しいリストを作成する場合に使用します。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> mainList = new ArrayList<>();
mainList.add(0);
mainList.add(1);
mainList.add(2);
mainList.add(3);
mainList.add(4);
List<Integer> sbList = mainList.subList(1, 3);
System.out.println(sbList);
}
}
実行結果:
[1, 2]
subListメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。
【Java入門】ListをsubListで切り出して新しいListを作る方法
更新日 : 2017年12月8日
containsで要素の有無を確認する方法
containsメソッドは指定した値がリスト内にあるかないか判定する場合に使用します。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> listA = new ArrayList<String>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
List<String> listB = new ArrayList<String>(Arrays.asList("e", "n", "g", "i", "n", "e", "e", "r"));
List<String> listC = new ArrayList<String>();
for(String a : listA) {
if(listB.contains(a)) {
listC.add(a);
}
}
System.out.println("ListC = " + listC);
}
}
実行結果:
ListC = [r, i]
containsメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。
【Java入門】Listの要素をremove、removeAllで削除する方法
更新日 : 2019年3月30日
removeで要素を削除する方法
removeメソッドは要素を削除する場合に使用します。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> array = new ArrayList<>();
array.add("侍");
array.add("samurai");
array.add("さむらい");
array.add("サムライ");
array.remove(1);
System.out.println(array);
}
}
実行結果:
[侍, さむらい, サムライ]
removeメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。
【Java入門】Listの要素をremove、removeAllで削除する方法
更新日 : 2019年3月30日
distinctで重複する要素を取り除く方法
distinctメソッドはJava8から追加されたStream APIです。
リスト内の重複する要素を取り除く場合に使用します。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> listA = new ArrayList<>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
listA.stream().distinct().forEach(System.out::print);
}
}
実行結果:
samuri
distinctメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。
【3分Java入門】Listで重複するデータを取り除く方法
更新日 : 2019年4月13日
cloneでListの全てをコピーする方法
cloneメソッドはリストのすべてをコピーする場合に使用します。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("b");
list1.add("c");
ArrayList<String> list2 = (ArrayList<String>)list1.clone();
System.out.println(list2);
}
}
実行結果:
[a, b, c]
cloneメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。
【Java入門】Listのコピーとcloneメソッドの使い方
更新日 : 2018年11月13日
Listの要素をソートする方法
リスト内の要素を順番に並べ替える場合には、Collectionsクラスのsortメソッドを使用します。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(10);
list.add(30);
list.add(5);
list.add(2);
list.add(11);
list.add(90);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}
実行結果:
[10, 30, 5, 2, 11, 90]
[2, 5, 10, 11, 30, 90]
リストの要素をソートする方法についての詳しい解説は、こちらを参考にしてくださいね。
【Java入門】配列やListをソートする方法(文字列もソート)
更新日 : 2019年4月23日
Listと他のコレクションとの変換方法
Listと他のコレクションとの相互変換についてみていきましょう。
配列とListの相互変換
配列からListに変換する場合は、ArraysクラスのasListメソッドを使用します。
Listから配列に変換する場合は、ListインターフェースのtoArrayメソッドを使用します。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 配列からListへの変換
String[] array1 = {"s", "a", "m", "u", "r", "a", "i"};
List<String> list1 = Arrays.asList(array1);
System.out.println(list1);
// Listから配列への変換
List<String> list2 = new ArrayList<>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
String[] array2 = list2.toArray(new String[list2.size()]);
for(String s: array2) {
System.out.println(s);
}
}
}
実行結果:
[s, a, m, u, r, a, i]
s
a
m
u
r
a
i
配列とListの相互変換についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。
【Java入門】List⇔配列の相互変換は”toArray”と”asList”でOK!
更新日 : 2019年6月8日
ListとSetの相互変換
それぞれのインスタンスを生成する際にコンストラクタの引数に変換前のオブジェクトを指定することで変換することができます。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args) {
// ListからSetへの変換
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(1);
Set<Integer> set1 = new HashSet<>(list1);
System.out.println(set1);
// SetからListへの変換
Set<Integer> set2 = new HashSet<>();
set2.add(1);
set2.add(2);
set2.add(3);
List<Integer> list2 = new ArrayList<>(set2);
System.out.println(list2);
}
}
実行結果:
[1, 2, 3]
[1, 2, 3]
ListとSetの相互変換についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。
【Java入門】ListとSetクラスの変換・違いまとめ
更新日 : 2019年1月23日
ListとMapの相互変換
ListからMapへ変換する場合は、Java8から追加されたStream APIのcollectメソッドを使うと簡潔に記述することができて便利です。
MapからListに変換する場合は、Listの要素にMapの値を変換する場合とキーを変換する場合とで使うメソッドが異なります。
値を変換する場合はvaluesメソッドを、キーを変換する場合はkeySetメソッドを使用します。
import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// ListからMapへの変換
List<String> list = new ArrayList<>(Arrays.asList("chocolate", "makaron", "cheesecake", "pudding", "cookie", "pancake"));
Map<String, Integer> map1 = list.stream().collect(Collectors.toMap(s -> s, s -> s.length()));
System.out.println(map1);
// MapからListへの変換
Map map2 = new HashMap();
map2.put("Samurai", "Engineer");
map2.put("Soldier", "Warrior");
List<String> listValues = new ArrayList<>(map2.values());
List<String> listKeys = new ArrayList<>(map2.keySet());
System.out.println(listValues);
System.out.println(listKeys);
}
}
実行結果:
{cookie=6, cheesecake=10, pancake=7, makaron=7, pudding=7, chocolate=9}
[Warrior, Engineer]
[Soldier, Samurai]
ListとMapの相互変換についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。
【Java入門】List⇔Map変換でJava8のStreamを使う方法
更新日 : 2017年9月6日
ListとArrayListの違い
ListとArrayListは混同されることが多いので、違いについて解説します。大きな違いはListはインターフェースで、ArrayListはListを実装したクラスになります。
インターフェースはオブジェクトの型として宣言時に使うことはできますが、インスタンスを生成することはできません。
以下のような記述は可能です。
List<データ型> オブジェクト名 = new ArrayList<>();
Listは左辺のようにオブジェクトの宣言時に型として使用することはできますが、右辺でnew句を使ってインスタンスを生成する場合には使用することはできません。
new句を使ってインスタンスを生成する場合は、ArrayListなどのListを実装したクラスがよく使われます。ちなみに、ArrayListはオブジェクトの宣言時の型として使用することももちろん可能です。
ではオブジェクトの宣言時にList型で宣言するのがいいのか、ArrayList型で宣言するのがいいのかどのように使い分けたらいいのでしょうか?
どちらも使い方によってメリット、デメリットがあります。詳しくはこちらを参考にしてください。
Javaのコレクションクラスまとめ(ListとArrayListの違いも解説)
更新日 : 2019年4月18日
まとめ
いかがでしたか?
よく使うメソッドからあまり見かけないメソッド、新しいメソッドなど多くのメソッドを解説してきました。これらのメソッドの使い方を覚えることでJavaのListを使いこなすことが出来るようになります。
もし、Listについて忘れてしまったらこの記事を思い出してくださいね!