【Java】Listの使い方一覧!Listのほぼ全ての使い方が載ってます!
JavaにはListという配列よりも便利な型があります。
現場でもよくつかわれると思います。
この記事では、Listの使い方全般を解説していきます。
目次
JavaのListとは?
JavaのListとは配列みたいなものです。要素の検索や消去、追加、置換が配列より簡単にできるという認識で大丈夫だと思います。
もう少し詳しく説明すると、配列ははじめにメモリ上に領域を確保を確保しますが、Listは新しい要素が追加されるたびにメモリの領域を確保します。
また、JavaのListのインタフェースは「java.util.List」で、Javaの各要素にはListインデックスがあります。Listの最初の要素にはインデックス0であり、2番目の要素にはインデックス1になります。因みにインデックスは「Listの先頭から何要素離れているか」を意味してます。Listは任意にJavaオブジェクトに追加できます。
Listの宣言方法
まず初めにListの宣言方法を解説します!
1 |
List<データ型名> オブジェクト名 = new ArrayList<データ型名>(); |
Listを宣言するには、Listの要素の型を指定する必要があります。
Listの要素の型は、Integer型やString型などです。Listのオブジェクト(変数)には指定した型のものであればなんでも入れることができます。
インスタンスを生成する際には、new演算子を使います。
例えばint型の要素をもつListの場合は、以下のように記述します。
1 |
List<int> list = new ArrayList<String>(); |
これで空のintが用意できました。
初期化時に値を追加する方法についてみていきましょう!
挿入,追加
Listに要素(オブジェクト)を挿入するには、add()メソッドを使用します。
1 2 3 4 5 |
List <String> listA = new ArrayList <>(); listA.add( "要素1"); listA.add( "要素2"); listA.add( "要素3"); |
null値の挿入
Listにnull値を挿入をすることもできます
1 2 3 4 5 |
Object element = null; List<Object> list = new ArrayList<>(); list.add(element); |
インデックスを指定して要素を挿入
特定のインデックス要素をListにを挿入することもできます。List インターフェースは、最初のパラメータとしてインデックス、また第二のパラメータとして要素を挿入する方法があります。
1 |
list.add(0, "element 4"); |
すでにListに要素が含まれていた場合、要素はListの内部シーケンスでさらに下に押し下げられます。例えば、新しい要素がインデックス0に挿入される前にインデックス0を持っていた要素は、インデックス1に押し下げられます。
要素の取得
“Listはインデックスを指定して要素を取得することができます
1 2 3 4 5 6 7 8 9 10 |
List<String> listA = new ArrayList<>(); listA.add("element 0"); listA.add("element 1"); listA.add("element 2"); //access via index String element0 = listA.get(0); String element1 = listA.get(1); String element3 = listA.get(2); |
Listに格納されているインデックス順にループで要素を取得することもできます。
List内の検索
ArrayListクラスで用意されている下記のメソッドを使うと、Listの要素を検索する事ができます。
indexOf()
lastIndexOf()
indexOf()を使ってインデックス番号を検索する
“indexOf()メソッドはList、ArrayListクラスのオブジェクト内に格納されている要素の先頭から検索を行います。
indexOf()を使ってインデックスを検索する例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
List<String> list = new ArrayList<>(); String element1 = "element 1"; String element2 = "element 2"; list.add(element1); list.add(element2); int index1 = list.indexOf(element1); int index2 = list.indexOf(element2); System.out.println("index1 = " + index1); System.out.println("index2 = " + index2); |
出力結果
index1 = 0
index2 = 1
Listにある最後の要素を検索
“lastIndexOf()メソッドは、List指定された要素の最後にあるインデックスを検索します。
lastIndexOf()メソッドの例”
1 2 3 4 5 6 7 8 9 10 11 |
List <String> list = new ArrayList <>(); 文字列element1 = "element 1"; 文字列element2 = "element 2"; list.add(element1); list.add(element2); list.add(element1); int lastIndex = list.lastIndexOf(element1); System.out.println( "lastIndex =" + lastIndex); |
出力結果
lastIndex = 2
最後に発生したインデックスは2です。
要素が含まれているかの確認
Listに特定の要素が含まれているか確認
“ListのList contains()メソッドを使用して 、Listに特定の要素が含まれているかどうかを確認できます。
“
1 2 3 4 5 6 7 8 9 10 |
List <String> list = new ArrayList <>(); String element1 = "element 1"; list.add(element1); boolean containsElement = list.contains( "element 1"); System.out.println(containsElement); |
出力結果
TRUE
List実際には要素が含まれているためtrueが出力されます。
Listにnull値が含まれているかの確認
“実際Listにnull値が含まれているかどうかを確認できます。
“
List にnull値が含まれているかどうかを確認するサンプル
1 2 3 4 5 |
list.add(null); containsElement = list.contains(null); System.out.println(containsElement); |
contains() メソッドは、明らかに入力パラメータがnullの場合、各要素との比較にequals()メソッドを使用せず==演算子を使用しています。
要素の削除
下記の2つの方法でListの削除ができます。
1. remove(オブジェクトの要素)
2. remove(インデックス番号)
remove(オブジェクトの要素)でListから削除
remove(Object element)で指定した値が存在する場合、Listからその要素を削除します。その後、List内の全ての要素は上に移動します。なのでインデックス番号は1ずつズレます。
1 2 3 4 5 6 |
List<String> list = new ArrayList<>(); String element = "first element"; list.add(element); list.remove(element); |
この例は最初に要素を追加してから、Listから削除してます。
remove(インデックス番号)でListから削除
Listのremove(int index)メソッドは、指定されたインデックス番号にある要素を削除します。その後、List内のすべての要素はList内で上に移動します。なのでインデックス番号は1ずつズレます。
1 2 3 4 5 6 7 |
List<String> list = new ArrayList<>(); list.add("element 0"); list.add("element 1"); list.add("element 2"); list.remove(0); |
Listから全ての要素を削除
” Listインターフェースには、clear()メソッドというものがあります。clear()メソッドは呼び出されたときにListからすべての要素を削除するメソッドが含まれています。Listからすべての要素を削除することは、クリアするとも言います。
“
1 2 3 4 5 6 7 |
List<String> list = new ArrayList<>(); list.add("object 1"); list.add("object 2"); //etc. list.clear(); |
まず、新しいListが作成されます。次に、2つの要素がListに追加されます。3番目に、clear()メソッドが呼び出されます。その後clear()メソッドが呼び出され、Listの中身が完全に空になります。
List間で共通部分以外の要素の削除(.retainAll)
“Listインターフェースには、List間で共通部分以外の要素の削除できるretainAll()メソッドと呼ばれるメソッドがあります。つまり、Listのretain()メソッドは、一方の変数にない全ての要素をList内から削除します。結果2つのListの共通部分が残ります。List retainAll()
“
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
List<String> list = new ArrayList<>(); List<String> otherList = new ArrayList<>(); String element1 = "element 1"; String element2 = "element 2"; String element3 = "element 3"; String element4 = "element 4"; list.add(element1); list.add(element2); list.add(element3); otherList.add(element1); otherList.add(element3); otherList.add(element4); list.retainAll(otherList); |
変数listの中身
element1,element3
Listのサイズ
size()メソッドを呼び出すこと で、Listの要素数を取得できます。
size()メソッドの例
1 2 3 4 5 6 7 |
List<String> list = new ArrayList<>(); list.add("object 1"); list.add("object 2"); int size = list.size(); System.out.println(size); |
出力結果
2
Listの型変換
Listを配列に変換
Listを配列に変換することもできます。
Listを配列に変換した例
1 2 3 4 5 6 7 8 |
List<String> list = new ArrayList<>(); list.add("element 1"); list.add("element 2"); list.add("element 3"); list.add("element 3"); Object[] objects = list.toArray(); |
Listを特定のString型の配列 に変換
ListをString型等、特定の型の配列 に変換することもできます。
ListをString型の配列に変換した例
1 2 3 4 5 6 7 8 |
List<String> list = new ArrayList<>(); list.add("element 1"); list.add("element 2"); list.add("element 3"); list.add("element 3"); String[] objects1 = list.toArray(new String[0]); |
サイズ0のString配列をに渡しても、toArray()返される配列にはListのすべての要素が含まれることに注意してください。Listの要素と同じ数の要素が含まれます。
配列をListに変換
Listを配列に変換することもできます。
Listを配列に変換した例
1 2 3 |
String[] values = new String[]{ "one", "two", "three" }; List<String> list = (List<String>) Arrays.asList(values); |
Arrays.asList()は、配列をListに変換 するメソッドです。
Listのソート(並べ替え)
Listをソートするには2つの方法があります。自然な並べ替えにはCollectionsクラスを使用するか、List sort()メソッドを使用して独自のコンパレータで並べ替えることができます。
Listのソートの例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package com.journaldev.examples; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; public class ListSortExample { public static void main(String[] args) { List<Integer> ints = new ArrayList<>(); Random random = new Random(); for (int i = 0; i < 10; i++) ints.add(random.nextInt(1000)); //natural sorting using Collections class Collections.sort(ints); System.out.println("Natural Sorting: "+ints); //My custom sorting, reverse order ints.sort((o1,o2) -> {return (o2-o1);}); System.out.println("Reverse Sorting: "+ints); } } |
出力結果
Natural Sorting: [119, 273, 388, 450, 519, 672, 687, 801, 812, 939]
Reverse Sorting: [939, 812, 801, 687, 672, 519, 450, 388, 273, 119]
Ryotin
現役フリーランスエンジニアです。使ってるエージェントはフライテック!得意言語はJava。月収は75万円。SESのフリーランスではこれ以上稼ぐのは厳しそう...とはいってもサラリーマンの時より倍の収入だから家族も喜んでるけどね!