同じ機能をコード化するさまざまな方法を比較する新しいスレッドを開始しています。この投稿では、要素が 1 つだけの単純なリストを作成する 2 つの一般的な方法を比較します。具体的には、最も一般的に使用される List 実装コンストラクターと、単一の要素を含む不変リストを作成するための簡単なファクトリ メソッドである Collections.singletonList を調べます。
初期容量を指定せずに ArrayList を初期化するたびに、空の配列から始まります。最初の要素を追加すると、配列のコピーを伴う比較的複雑なアルゴリズムを使用して ArrayList のサイズが変更されます。 ArrayList 構造を見てみましょう:
何が起こるかを段階的に説明します:
常に 1 つの要素を含む単純なリストのみが必要な場合、このサイズ変更プロセスは非常に複雑になります。
ということで、代替案について話しましょう!
パブリック静的
このメソッドは、指定されたオブジェクトのみを含む不変のリストを返します。 Java 1.3 で導入された singletonList にはいくつかの利点があります:
不変性:その実装を見てみましょう:
SingletonList が継承する AbstractList は、すべての変更可能なメソッドを次のように定義します:
これにより、リストのサイズやその単一要素の内容を唱えることが不可能になります。
不変性は非常に有利な機能です。ここでは詳しく説明しませんが、興味のある開発者はこの記事から詳細を学ぶことができます。
メモリ割り当て:SingletonList クラスには、単一の要素を収容するための単純なフィールドが 1 つだけ含まれています。これは、単純な ArrayList 単純コンストラクターを使用する配列を使用する ArrayList とは異なり、要素の追加後にサイズ 10 の配列が残ります。
CPU 使用率:SingletonList コンストラクターは単一の要素をパラメーターとして受け入れ、サイズ変更、配列のコピー、または操作を必要としません。これは、ArrayList の追加メソッドと比較してはるかに効率的です。
この投稿では、単一要素で単純なリストを作成する 2 つの方法、ArrayListconstructor を使用する方法と Collection.singletonList メソッドを使用する方法を比較しました。 ArrayList は柔軟で一般的に使用されるデータ構造ですが、特に要素を追加するときのメモリ割り当てと CPU 使用率の点で、不必要なオーバーヘッドが発生します。このオーバーヘッドには配列のサイズ変更とコピーが含まれますが、要素を 1 つだけ保持するリストでは冗長になる可能性があります。ただし、この要素を変更する必要がある場合は、ArrayList が適切なソリューションです。
一方、Collection.singletonList は、単一要素のリストを作成するためのより効率的な代替手段を提供します。この方法は、より簡潔で使いやすいだけでなく、不変性も保証するため、多くのシナリオで大きな利点となります。 ArrayList と比較してメモリ使用量が最小限であり、CPU リソースをほとんど必要としません。
要約すると、要素を 1 つだけ含む単純で不変のリストの場合、Collection.singletonList は効率性、シンプルさ、不変性の点で優れた選択肢となります。ただし、リスト内の要素を変更する必要がある場合は、ArrayList がより適切な選択肢になる可能性があります。
次の投稿では、単一要素リストの別の代替手段である List.of ファクトリ メソッドを比較します。また会いましょう!
以上が[コード比較] ArrayList と Collections.singletonListの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。