「あなたの脳を少しトレーニングしてみてはいかがですか?脳がまだ機能していることを願っています。」

「先ほど、コンテナーとコレクションの表で、同じインターフェイスに複数の実装を含めることができることがわかりました。次に、なぜそれが必要なのかを説明します。また、 ArrayList が LinkedList とどのように異なるのかを説明ます。」

「実際のところ、コレクションはさまざまな方法で実装される可能性があり、常に理想的な実装というものは存在しません。 あるアプローチでは、一部の操作は高速ですが、他の操作は低速です。別のアプローチではその逆が当てはまる可能性があります。完璧な単一サイズの実装はありません。」万能のソリューション。」

「同じコレクションの複数のバージョンを実装することが決定されたのはこのためです。各実装は、いくつかの狭い操作セットに対して最適化される必要があります。これが、異なるコレクションが誕生した方法です。例として 2 つのクラス、 ArrayListLinkedListを学習してみましょう。」

ArrayList と LinkedList の比較 - 1

"内部的には、ArrayList は通常の配列として実装されます。そのため、要素を途中に挿入するには、最初に後続の要素をすべて 1 つシフトしてから、新しい要素を空きスロットに配置する必要があります。要素の取得と設定 ( get、set) )これらの操作は単に関連する配列要素をアドレス指定するだけなので、高速です。」

" LinkedListには異なる内部構造があります。これは、相互接続された要素を持つリストとして実装されます。つまり、個別の要素のセットであり、各要素には、リスト内の次の要素と前の要素への参照が格納されます。そのようなリストの中央に要素を挿入するには、将来の隣接要素の参照を変更するだけで済みます。ただし、要素番号 130 を取得するには、各オブジェクトを 0 から 130 まで実行する必要があります。つまり、get および set 操作が遅くなります。次の表を見てください。 :"

説明 手術 配列リスト リンクリスト
要素を取得する 得る 速い 遅い
要素を設定する 設定 速い 遅い
要素を追加します(リストの最後に) 追加 速い 速い
要素の挿入(任意の位置) add(i, 値) 遅い 速い
要素を削除する 削除 遅い 速い

「なるほど。今はそれを理解し始めています。特定の状況でどのコレクションが最適かを知るのに役立つ基準やルールはありますか?」

「わかりやすくするために、次のルールを与えます。コレクションの途中で要素を頻繁に挿入 (または削除) する場合は、 LinkedList を使用することをお勧めします。それ以外の場合は、ArrayList の方が適切に機能ます

「より高度なレッスンでそれらがどのように構成されているかについて詳しく説明しますが、今のところは、それらを使用する練習だけをしていきます。」