JavaRush /Java Blog /Random-JA /コーヒーブレイク#129。LinkedList と ArrayList の違いは何ですか? Java 19 で追加...

コーヒーブレイク#129。LinkedList と ArrayList の違いは何ですか? Java 19 で追加される新機能

Random-JA グループに公開済み

LinkedList と ArrayList の違いは何ですか?

出典: Rrtutors.com Java プログラミングに慣れていない場合は、コレクションを操作するときに LinkedList と ArrayList のどちらを使用するのが良いか疑問に思うはずです。これらのクラスはどちらも同様の機能を実行するため、作業にどちらを使用するのが適切かを判断するのが難しい場合があります。この投稿では、2 つのクラスの違いを定義し、それらをいつどこで使用するかについて説明します。 コーヒーブレイク#129。 LinkedList と ArrayList の違いは何ですか?  Java 19-1 で追加される新機能

JavaのArrayListとLinkedListの違い

ArrayList と LinkedList を基準に基づいて比較してみましょう。

操作

どちらの場合も、配列操作の速度に違いがあります。ArrayList は、LinkedList よりも配列の操作が遅くなります。これは、LinkedList がノードベースであり、ビット シフトをあまり必要としないためです。

アクセス

ArrayList はデータの保存と取得をより高速に行います。一方、LinkedList はより高速なデータ処理をサポートします。

実装

ArrayList はリストのみを実装しますが、LinkedList はリストとキューの両方を実装します。LinkedList はキューとしてもよく使用されます。

内部実装

ArrayList はその要素を動的配列に格納しますが、LinkedList は二重リンク リストを使用します。

ArrayList と LinkedList をいつ使用するか?

ArrayList は読み取り専用コレクションの操作に適しており、LinkedList は追加や削除などのさまざまなデータ変更が可能なコレクションの操作に適しています。

リンクリストの例:

import java.util.LinkedList;

import java.util.List;

public class LinkeddExample {

    public static void main(String[] args) {

        List<String> myGroup=new LinkedList<>();

        myGroup.add("Pohekar");

        myGroup.add("Sumedh");

        myGroup.add("Nikir");

        System.out.println("Create Group: "+myGroup);

        myGroup.remove("Pohekar");

        System.out.println("Remove Group element: "+myGroup);

        myGroup.set(1,"Niha");

        System.out.println("Modify Group: "+myGroup);

    }

}

ArrayList の例:

import java.util.ArrayList;

import java.util.List;

public class ArrayListExca {

    public static void main(String[] args) {

        List<String> Pro=new ArrayList<>();

        Pro.add("PythonPro");

        Pro.add("JavaPro");

        Pro.add("C#Pro");



        System.out.println("Traversing ArrayList...");

        for(String s:Pro){

            System.out.println(s);


    }

    }

}

JDK 19: Java 19 で追加される新機能

出典: InfoWorld 仮想スレッド、switch ステートメントのパターン マッチング、ベクター API、Linux/RISC-V ポートはすべて、短期サポート付きの言語の新しいリリースである Java 19 で今年 9 月に提供されます。さらに、Java Development Kit 19 では最近、データ ナビゲーションと処理のためのレコード パターンのプレビューという別の機能が導入されました。Java 言語を改善する進行中の計画の一環として、JDK 19 (単に Java 19) には、ジェネリックから値オブジェクトに至るまで、膨大な数の機能が含まれる可能性があります。JDK 19 は、2022 年 3 月 22 日に導入された JDK 18 に続く次のアップデートになります。Java の標準バージョンは 6 か月ごとにリリースされます。OpenJDK 開発者は、JDK 19 の正式リリース スケジュールを公開しました。それによると、安定版リリースは 9 月 20 日に公開される予定です。これに先立ち、開発者は 6 月 9 日と 7 月 21 日にリリースされる予備ビルドに慣れることができます。リリース候補は 8 月 11 日と 8 月 25 日に公開されます。JDK 19 の早期アクセス ビルドはjdk.java.net/19で入手できます。JDK 19 で提供される機能は次のとおりです。
  • レコード テンプレートをプレビューしてレコード値を解析します。レコード テンプレートとタイプ テンプレートをネストして、宣言的で強力な構成可能な形式のナビゲーションとデータ処理を提供できます。この機能の背後にある考え方は、型パターンの構文やセマンティクスを変更せずに、より複雑な複合データ クエリを表現するためのパターン マッチング拡張機能を追加することです。この提案は、2021 年 3 月に JDK 16 で導入された instanceof のパターン マッチングに基づいています。さらに、将来の計画では、配列テンプレートや可変引数テンプレートなどの機能を使用してレコード テンプレートを拡張することが必要になる可能性があります。テンプレート エントリは、パフォーマンス指向の小規模な Java 機能を調査および開発することを目的としたプロジェクト Amberの一部です。

  • Alien Functionプレビューとメモリ API。Java プログラムが Java ランタイムの外部でコードやデータと対話できるようにする API が導入されます。

    API は、外部関数 (Java ランタイムの外部のコード) を効率的に呼び出し、外部メモリ (JVM によって管理されないメモリ) に安全にアクセスすることにより、Java ネイティブ インターフェイス (JNI) を脅かすことなく、Java プログラムがネイティブ ライブラリを呼び出し、ネイティブ データを処理できるようにします。 )。

  • 仮想スレッドのプレビュー。このオファリングでは、高性能の並列アプリケーションの作成、保守、監視の労力を大幅に軽減する軽量スレッドが導入されています。この提案の考え方は、ハードウェアを最適に使用して、シンプルなリクエストごとのスレッド形式で記述されたサーバー アプリケーションを拡張する機能を提供することです。これにより、最小限の変更でjava.langThread APIを使用するコードに仮想スレッドを実装できるようになり、既存の JDK ツールを使用して仮想スレッドのトラブルシューティング、デバッグ、プロファイリングを実行できるようになります。

  • 式と switch ステートメントのパターン マッチングの 3 番目のプレビュー。パターン マッチングを switch に拡張して、それぞれに特定のアクションを持つ多数のパターンに対して式をテストできるようにします。これにより、複雑なデータ中心のクエリを簡潔かつ安全に表現できるようになります。この機能は、以前に JDK 17 および JDK 18 でプレビューされました。3 番目のプレビューでは、保護された when パターンを switch ブロック内の句で置き換えるなどの改善が追加されます。この提案の考え方は、スイッチ式と演算子の表現力と適用性を拡張することです。

  • ベクトル API の4 回目のインキュベーションでは、サポートされているプロセッサ アーキテクチャ上で実行時に最適なベクトル命令に確実にコンパイルされるベクトル計算が表現されます。これにより、同等のスカラー計算よりも優れたパフォーマンスが得られます。新しい API を使用する開発者は、HotSpot のオートベクタライザーを使用して、複雑なベクトル アルゴリズムを Java で作成できるようになりますが、ベクトル化をより予測可能で信頼性の高いものにするカスタム モデルを使用します。Vector API は、以前は JDK 16、JDK 17、および JDK 19 でインキュベートされていました。

    ベクトル API へのもう 1 つの追加として、ビット単位の整数レーンワイド演算が拡張され、1 ビットの数のカウント、ビット順序の反転、ビット圧縮と拡張などの演算が含まれるようになります。

  • Linux/RISC-Vポートにより、Java は、さまざまな言語ツールキットですでにサポートされているハードウェア命令セットのサポートを獲得します。RISC-V は、関連する ISA のファミリーです。Linux/RISC-V ポートは、ベクトル命令を含む 64 ビット汎用 ISA である RV64GV RISC-V 構成のみをサポートします。

    このポートは、次の HotSpot 仮想マシン オプションをサポートします: テンプレート インタープリター、JIT コンパイラー C1 (クライアント)、JIT コンパイラー C2 (サーバー)、および ZGC や Shenandoah を含む現在の主要なガベージ コレクターすべて。

JDK 18 と同様、JDK 19 は 6 か月のサポート付きの短期リリースになります。以前のリリースである JDK 17 は、数年間のサポートが保証された LTS リリースでした。2021年9月14日に導入されました。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION