この一連の投稿では、同じ機能をコード化するさまざまな方法を比較しています。前回の投稿では、単一要素のリストを作成するために Collections.singletonList と ArrayList を比較しました。
この投稿では、Collections.singletonList と別のよく知られたファクトリ メソッド List.of を比較します。
コレクション::singletonList
メソッドのシグネチャ
パブリック静的
public static void main(String[] args) { final var addresses = Collections.singletonList( new Address( "742 Evergreen Terrace", "Springfield", "New York", "13468", "US" )); System.out.println(addresses); }
説明
このメソッドは、指定されたオブジェクトのみを含む不変のリストを返します。 Java 1.3で導入されました。 ArrayList に対する利点については前回の投稿で説明しましたが、要約すると次のとおりです。
- インライン実装: 単一行で目的の要素を使用して初期化します。
- 不変性: リストのサイズとその単一要素の内容は変更できません。
- メモリ割り当て: SingletonList クラスには、単一の要素に対してフィールドが 1 つだけ含まれます。
- CPU 使用率: SingletonList コンストラクターは単一の要素をパラメーターとして受け入れ、サイズ変更や配列の操作は必要ありません。
リスト::の
メソッドのシグネチャ
静的
public static void main(String[] args) { final var addresses2 = List.of( new Address( "1007 Mountain Drive", "Bristol Township", "New Jersey", null, "US" )); System.out.println(addresses2); }
説明
List.of(E e) メソッドも、変更不可能なリストを返すファクトリ メソッドです。 1 つの要素のみをサポートする Collections.singletonList(E e) とは異なり、List.of は 0 ~ 10 の要素と、複数の要素を含む配列をサポートします。これは、singletonList から 17 年後の Java 9 で導入されました。
SingletonList とは異なり、次のコメントがあることに注目してください:
指定されたオブジェクトのみを含む不変リストを返します。
Array.of は、変更不可能なリストであることを示しています:
1 つの要素を含む変更不可能なリストを返します。
これは、コレクションの不変性についての新たな理解を反映しています。このドキュメントによると:
要素を追加、削除、または置換できない場合、コレクションは変更不可能とみなされます。ただし、変更不可能なコレクションは、コレクションに含まれる要素が不変である場合にのみ不変になります。
このような用語の違いにもかかわらず、どちらのファクトリ メソッドもほぼ同じ機能を持っています。 UnmodifiableList の内部を深く調べると、次のことがわかります。
static <e> List<e> of(E e1) { return new ImmutableCollections.List12(e1); } </e></e>
驚いたことに、彼らは 不変 というあまり正確ではない用語を使用しました!
static final class List12<e> extends AbstractImmutableList<e> implements Serializable { @Stable private final E e0; @Stable private final E e1; List12(E e0) { this.e0 = Objects.requireNonNull(e0); this.e1 = null; } ... } </e></e>
static abstract class AbstractImmutableList<e> extends AbstractImmutableCollection<e> implements List<e>, RandomAccess { // all mutating methods throw UnsupportedOperationException @Override public void add(int index, E element) { throw uoe(); } @Override public boolean addAll(int index, Collection extends E> c) { throw uoe(); } @Override public E remove(int index) { throw uoe(); } @Override public void replaceAll(UnaryOperator<e> operator) { throw uoe(); } @Override public E set(int index, E element) { throw uoe(); } @Override public void sort(Comparator super E> c) { throw uoe(); } </e></e></e></e>
唯一の違いは、List12 には潜在的に 2 つの要素に対して 2 つのフィールドがあることです。これにより、大きなオブジェクトを処理しない限り、メモリ使用量も無視できます。
結論
今回は、Collections.singletonList と List.of ファクトリメソッドを比較して、単一要素のリストを作成しました。 immutable と unmodifiable のセマンティクスについて説明し、どちらの方法も効率的で、簡潔で、リソースが少ないことを示しました。より新しい Java バージョンを使用できる場合は、その使いやすさと明瞭さ、そしてコレクションよりもリスト インターフェイスをよく使用するため、そのバージョンの方が望ましいと考えられます。古い Java バージョンに制限されている場合は、Collections.singletonList が引き続き有力な選択肢となります。
以上が[コード比較] Collections.singletonList と List.ofの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Javaはプラットフォーム固有の問題をどのように軽減しますか? Javaは、JVMおよび標準ライブラリを通じてプラットフォームに依存します。 1)bytecodeとjvmを使用して、オペレーティングシステムの違いを抽象化します。 2)標準のライブラリは、パスクラス処理ファイルパス、CHARSETクラス処理文字エンコードなど、クロスプラットフォームAPIを提供します。 3)最適化とデバッグのために、実際のプロジェクトで構成ファイルとマルチプラットフォームテストを使用します。

java'splatformentencentenhancesmicroservicesecturectureby byofferingdeploymentflexability、一貫性、スケーラビリティ、およびポート可能性。1)展開の展開の展開は、AllosmicRoserviThajvm.2)deploymentflexibility lowsmicroserviceSjvm.2)一貫性のあるAcrossServicessimplisimpligiessdevelisementand

Graalvmは、Javaのプラットフォームの独立性を3つの方法で強化します。1。言語間の相互運用性、Javaが他の言語とシームレスに相互運用できるようにします。 2。独立したランタイム環境、graalvmnativeimageを介してJavaプログラムをローカル実行可能ファイルにコンパイルします。 3.パフォーマンスの最適化、Graalコンパイラは、Javaプログラムのパフォーマンスと一貫性を改善するための効率的なマシンコードを生成します。

aeffectivelytestjavaapplicationsforformcompativity、followthesesteps:1)setupautomatedacrossmultipleplatformsusingsingcitoolslikejenkinsorgithubactions.2)divivisonmanualtingonrealhardwaretocatissusuessususus.3)

Javaコンパイラは、ソースコードをプラットフォームに依存しないバイトコードに変換することにより、Javaのプラットフォームの独立性を実現し、JVMがインストールされた任意のオペレーティングシステムでJavaプログラムを実行できるようにします。

bytecodeachievesplatformedentencedexedectedbyavirtualMachine(VM)、forexApplev.forexample、javabytecodecanrunrunrunnonydevicewithajvm、writeonce、runany "ferfuctionality.whilebytecodeOffersenhの可能性を承認します

Javaは100%のプラットフォームの独立性を達成することはできませんが、そのプラットフォームの独立性はJVMとBytecodeを通じて実装され、コードが異なるプラットフォームで実行されるようにします。具体的な実装には、次のものが含まれます。1。bytecodeへのコンパイル。 2。JVMの解釈と実行。 3。標準ライブラリの一貫性。ただし、JVMの実装の違い、オペレーティングシステムとハードウェアの違い、およびサードパーティライブラリの互換性は、プラットフォームの独立性に影響を与える可能性があります。

Javaは、「Write onse、Averywhere」を通じてプラットフォームの独立性を実現し、コードの保守性を向上させます。 2。メンテナンスコストが低いため、1つの変更のみが必要です。 3.チームのコラボレーション効率が高く、知識共有に便利です。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ホットトピック









