LoginSignup
0
2

More than 1 year has passed since last update.

List.of()メソッドとArrays.asList()メソッドの違いについて(備忘録)

Last updated at Posted at 2023-03-30

自分用にList.of()メソッドとArrays.asList()メソッドの違いについてまとめていきたいと思います。

 List<Integer> number = new ArrayList<>(Arrays.asList(A, B, C));   

 List<Integer> number = new ArrayList<>(List.of(A, B, C));  

上記の2つのコードは、両方とも要素がA、B、CであるArrayListを生成するための方法ですが、いくつかの違いがあります。

①可変か不可変か

・Arrays.asList() メソッドは、引数として渡された配列要素を含む可変長引数リストを返します。
・ist.of() メソッドは、不変のリストを返します。

つまり、List.of() メソッドは、返されたリストを変更しようとするとUnsupportedOperationExceptionがスローされる可能性があります。
一方、Arrays.asList() メソッドで作成されたリストは、変更が可能であり、要素を追加、変更、削除することができます。

②要素の数の制限

・Arrays.asList()もList.of() メソッドも、引数として指定された要素の数に制限があります。
 最大で255個の引数を受け取ることができます。
 ただし、配列を引数で渡す場合はこの限りではありません。

③要素の変更・追加・削除

・Arrays.asList()で作成されたリストは固定長配列のビューであるため、要素の変更はできますが、追加や削除はできません。
・List.of()で作成されたリストは不変であるため、要素の変更、追加、削除はできません。

Integer A = 1, B = 2, C = 3;

// Arrays.asList()で作成されたリスト  
List<Integer> number1 = new ArrayList<>(Arrays.asList(A, B, C));  
number1.set(2, 4); //要素の変更は可能  
number1.add(5); //要素の追加はできない(UnsupportedOperationExceptionがスローされる)  
  
// List.of()で作成されたリスト  
List<Integer> number2 = new ArrayList<>(List.of(A, B, C));  
number2.set(2, 4); //要素の変更はできない(UnsupportedOperationExceptionがスローされる)  
number2.add(5); //要素の追加はできない(UnsupportedOperationExceptionがスローされる)  

④まとめ

簡潔ですがList.of()メソッドとArrays.asList()メソッドの違いについてまとめてみました。
何か間違いや気になる点があればご指摘いただけると幸いです。

0
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2