Gradleとは何者?インストール方法〜使い方までわかりやすく解説
本記事で紹介するサンプルコードは、macOS Montere、OpenJDK-11.0.13で動作確認しています。
1.JavaのListを初期化する基本的な方法
JavaのListを初期化する基本的な方法を解説します。初期化する方法はいくつかありますが、ここでは基本的な方法を紹介します。
JavaのListについて詳しく知りたい方は、以下の記事も参考にしてみてください。
①new演算子とArrayListで初期化する
Listは初期化時にデータの型を指定することで、さまざまなデータ型を格納できます。データ型には、「String」や「Integer」などがありますね。
new演算子でArrayListクラスのインスタンスを生成し、Listオブジェクトに格納します。
たとえば、String型のListは、以下のように記述します。
List<String> programlist = new ArrayList<String>();
また、ダイヤモンド構文を用いると、初期化時に型を省略して書けます。型名が複雑なときに有効で、コードがシンプルになりますよ。
List<String> programlist = new ArrayList<>();
②サイズを指定して初期化する
ArrayListのコンストラクタで、サイズを指定し初期化できます。指定したサイズで配列が生成されるため、そのサイズを超えるまで配列の再生成は発生しません。
要素数が大きくなることがわかっている場合は、大きなサイズを指定して初期化することをおすすめします。初期化で設定したサイズ以上に要素を追加すると、サイズ拡張処理により動作が遅くなるためです。
要素数が500のListは、以下のように記述します。
List<String> programlist = new ArrayList<String>(500);
2.Listを初期化する際に初期値を設定する方法
Listの初期値を設定する基本的な方法を解説します。
①Arrays.asListで値を指定し、コンストラクタで渡す
Arrays.asListは、引数で指定した配列をListとして返すメソッドです。
Arryas.asListをArrayListのコンストラクタに指定する方法について、サンプルコードを見ながら確認していきましょう。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class App {
public static void main(String[] args) {
//初期化の際にArrays.asListで値を指定し、コンストラクタで渡す
List<String> programlist = new ArrayList(Arrays.asList("Java","Python","C#"));
//出力
for(int i = 0; i < programlist.size(); i++){
System.out.println(programlist.get(i));
}
}
}
実行結果:
Java
Python
C#
このように、リストのサイズを決めずに初期値を設定することが可能です。
②Arrays.asListを使って初期化
次に、Arrays.asListを使って初期化するサンプルコードを紹介します。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class App {
public static void main(String[] args) {
//Arrays.asListを使って初期化
List<String> programlist = Arrays.asList("Java","Python","C#");
//出力
for(int i = 0; i < programlist.size(); i++){
System.out.println(programlist.get(i));
}
}
}
実行結果:
Java
Python
C#
リストに要素を追加・削除できないので注意
Arrays.asListは戻り値のリストの長さが固定されます。そのため、リストに対してaddメソッドやdeleteメソッドで要素数を変更しようとすると、実行時エラーが発生します。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class App {
public static void main(String[] args) {
//Arrays.asListを使って初期化
List<String> programlist = Arrays.asList("Java","Python","C#");
//Listに追加
programlist.add("VB.NET");
//出力
for(int i = 0; i < programlist.size(); i++){
System.out.println(programlist.get(i));
}
}
}
実行結果:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.AbstractList.add(AbstractList.java:153)
at java.base/java.util.AbstractList.add(AbstractList.java:111)
at App.main(App.java:12)
この問題は、先に紹介した「①Arrays.asListで値を指定し、コンストラクタで渡す」で回避できます。サンプルコードで確認してみましょう。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class App {
public static void main(String[] args) {
//Array.asListで値を指定し、コンストラクタで渡す
List<String> programlist = new ArrayList(Arrays.asList("Java","Python","C#"));
//Listに追加
programlist.add("VB.NET");
//出力
for(int i = 0; i < programlist.size(); i++){
System.out.println(programlist.get(i));
}
}
}
実行結果:
Java
Python
C#
VB.NET
基本的に、要素数の追加ができる①の方法を使用する方が良いでしょう。
なお、②の初期化方法は、配列数が固定長であることが明白な場合によく使われます。
③addメソッドで値を追加
addメソッドを使って、初期化時に値を追加することも可能です。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class App {
public static void main(String[] args) {
//addメソッドで値を追加
List<String> programlist = new ArrayList<String>(){
{
add("Java");
add("Python");
add("C#");
}
};
//出力
for(int i = 0; i < programlist.size(); i++){
System.out.println(programlist.get(i));
}
}
}
実行結果:
Java
Python
C#
④List.ofを使って初期化
List.ofはJava9で追加されたメソッドです。
以下は、List.ofメソッドを使い初期化時に値を追加するサンプルコードです。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class App {
public static void main(String[] args) {
//List.ofを使って初期化
List<String> programlist = List.of("Java","Python","C#");
//出力
for(int i = 0; i < programlist.size(); i++){
System.out.println(programlist.get(i));
}
}
}
実行結果:
Java
Python
C#
List.ofメソッドを使用すると、Arrays.asList同様、シンプルなコードで初期化時に値を追加できます。List.ofは変更不可のリストなため、値の追加、変更、削除はできません。
またArrays.asListはnullを許容しますが、List.ofはnullを許容しません。