Javaのリストを一行で初期化する

この記事では、javaのリストを一行で初期化するためのさまざまな方法について説明します。

Javaはしばしばその冗長性のために批判されます。,structing it, storing it in a variable, invoking add() method on it n times, and then maybe wrapping it to make it unmodifiable:

1
2
3
4
5
6
7

List<String> list = new ArrayList<>();
list.,add(“C”);
リスト。add(“C++”);
リスト。add(“Java”);
リスト=コレクション。unmodifiableList(list);

この記事では、リストを単一の式で初期化するさまざまな方法について説明します。

配列。asList()

Arrays.asList()指定された配列によってバックアップされた固定サイズのリストを返します。 配列を構造的に変更することはできないため、リストに要素を追加したり、リストから要素を削除したりすることはできません。, The list will throw an UnsupportedOperationException if any resize operation is performed on it.

1
List<String> fixedLengthList = Arrays.,asList(“C”, “C++”, “Java”);

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(Arrays.,asList(“C”,”C++”,”Java”));

Java Collections

Collectionsクラスは、コレクションを操作し、指定されたコレクションに基づいて新しいコレクションを返すいくつかの静的

⮚コレクション。addAll()

Collections.addAll()指定された要素をすべて指定されたコレクションに追加します。 追加する要素は、個別に指定するか、配列として指定することができます。, When elements are specified individually, this method provides a convenient way to add a few elements to an existing collection:

1
2

List<String> list = Collections.EMPTY_LIST;
Collections.,addAll(list=new ArrayList<String>(),”C”,”C++”,”Java”);
↑コレクション。unmodifiableList()

または、別のコレクションからコピーコンストラクタを使用してコレクションを移入できます。 そのようなメソッドの一つは、Collections.unmodifiableList()指定されたリストの変更不可能なビューを返します。 返されたリストを変更しようとすると、UnsupportedOperationExceptionになります。

⮚コレクション。,singletonList()

単一の要素のみを含むリストが必要な場合は、その要素を含む不変のリストを返すCollections.singletonList()を使用できます。 リストに対して変更操作が実行された場合、リストはUnsupportedOperationExceptionをスローします。

1
リスト<文字列>リスト=コレクション。,singletonList(“Java”);

ダブルブレース初期化

別の選択肢は、”ダブルブレース初期化”を使用することです。 これにより、インスタンス初期化子だけを持つ匿名の内部クラスが作成されます。 この手法は、使用ごとに余分なクラスがかかり、囲むインスタンスおよびキャプチャされたオブジェクトへの隠し参照も保持されるため、避ける これにより、メモリリークやシリアル化の問題が発生する可能性,v>2

3
4
5
リスト<文字列>リスト=新しいArrayList<文字列>(){{
add(“c”);
add(“c++”);
add(“java”);
}};

java8h3java8stream apiを使用して、静的ファクトリメソッドからstreamを取得し、collectorを使用して入力要素を新しいリストに蓄積することで、小さなリストを構築できま, For example,

⮚ Collectors.toList()

Collectors.toList() returns a Collector that accumulates the input elements into a new List.

1
2

List<String> list = Stream.of(“C”, “C++”, “Java”)
.collect(Collectors.toList());

⮚ Collectors.,toCollection()

The streams collectors make no guarantee on the type of the List returned by toList(). To ensure the returned List is ArrayList, we can use toCollection(Supplier) as shown below:

1
2

List<String> list = Stream.,”C”,”C++”,”Java”,”C++”,”C++”,”C++”,”C++”,”C++”,”C++”,”C++”コレクト(コレクター。toCollection(ArrayList::new));
↑コレクター。collectingAndThen()

追加の仕上げ変換を実行するためにCollectorを適応させることができます。, たとえば、toList()コレクターを適応させて、常に変更不可能なリストを生成することができます。

Java9

Java9は、Lists.of()コンパクトで変更不可能なインスタンスを作成する静的ファクトリメソッドを提供することにより、少数の要素を持つリストのインスタンスを作成することを便利にしました。, For example,

1
List<String> unmodifiableList = List.of(“C”, “C++”, “Java”);

Java 9 provides 12 overloaded versions of this method –

Note there is a var-args version which can handle any number of elements., 今明らかな質問は、Var-argsだけで十分できるJava9が非常に多くの余分なメソッドを含んでいる理由ですか? その理由は、あの微妙なランタイムの性能です。 Var-argsバージョンは、varargsを使用しないオーバーロードよりも遅く実行される可能性があります。 これは、varargsメソッドを呼び出すたびに配列の割り当てと初期化が発生し、GCのオーバーヘッドが忘れられないためです。

Javadocに従って、List.of()によって作成されたリストインスタンスには、次の特性があります。

  1. これらは構造的に不変です。, 要素を追加、削除、または置換することはできません。 任意のミューテータメソッドを呼び出すと、常にUnsupportedOperationExceptionがスローされます。 ただし、含まれている要素自体が変更可能な場合、リストの内容が変更される可能性があります。
  2. null要素を許可しません。 Null要素を使用してそれらを作成しようとすると、NullPointerExceptionになります。
  3. すべての要素が直列化可能な場合、それらは直列化可能です。
  4. リスト内の要素の順序は、指定された引数の順序、または指定された配列内の要素の順序と同じです。,
  5. これらは値ベースです。 呼び出し側うな前提はのアイデンティティ返される場合がございます。 工場への新規インスタンスを作成または再利用を設定しています。 そのため、アイデンティティに依存する操作はこのインスタンス参考平等(==),アイデンティティハッシュコードと同期)信頼できないため、回避されるべきである。,

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(List.,of(“C”,”C++”,”Java”));

クラスの静的メソッドとは異なり、インターフェイスの静的メソッドは継承されないため、実装クラスやインターフェイス型のインスタンスを介して呼び出すことはできないことに注意してください。

Guava

Guavaは、リストインスタンスに関連するいくつかの静的ユーティリティメソッドも提供します。,

JavaでGuavaを使用してリストを初期化する

Apache Commons Collections

Apache Commons CollectionsListUtilsクラスは、指定されたリストに裏打ちされた変更不可能なリストを返します。unmodifiableList()これは、指定されたリストに裏打ちされた変更不可能なリストを返します。 指定されたリストがnullの場合はNullPointerExceptionをスローし、変更操作が実行された場合はUnsupportedOperationExceptionをスローします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です