インタビューの質問: ArrayList を拡張すると、どれくらい拡張されますか?

皆さんこんにちは、私はあなたのXiaomiです!今日は、Java の面接でよく聞かれる質問についてお話したいと思います。「ArrayList を拡張すると、どれくらい拡張されますか?」 多くの友人が面接でこの質問に遭遇したと思いますので、次に詳しく説明します。この質問を分析して、面接がより快適になることを願っています。

ArrrayList の内部実装を理解する

拡張戦略を詳しく分析する前に、まず ArrayList の内部実装原理を理解する必要があります。ArrayList は Java コレクション フレームワークの動的配列であり、必要に応じて要素を動的に追加または削減できます。ArrayList の最下層は配列によって実装されており、配列の容量が新しい要素を格納するのに十分でない場合は、拡張操作が必要になります。

拡大戦略の紹介

ArrayList を展開すると、要素が追加されるたびに展開されるわけではないため、非常に非効率的になります。代わりに、「倍増」戦略を採用します。つまり、アレイの容量が不十分な場合は、現在の容量を 2 倍にします。この利点は、拡張操作で大きなメモリ ブロックを一度に拡張できるため、頻繁な拡張によるパフォーマンスの低下が軽減されることです。

ソースコード分析

ArrayList の展開ロジックは、実際にはensureCapacityInternalメソッドによって完了します。このソースコードを見てみましょう:

 

 

上記のコードから、 growメソッドでは、新しい容量 ( newCapacity ) が古い容量 ( oldCapacity ) を 1 ビット右シフトして (つまり、2 で割って)、古い容量を加算することによって取得されることがわかります。このようにして、容量倍増拡張戦略が実現されます。

拡張の発動条件を理解する

ソース コード分析に基づいて、ArrayList 展開のトリガー条件をまとめてみましょう。

  • 現在の要素数 (サイズ) が現在の配列容量 (長さ) に達しました。
  • 要素を追加するときは、容量が十分であることを確認する必要があります。そうでないと拡張がトリガーされます。

配列は倍増戦略に従って拡張されますが、無限に拡張されるわけではないことに注意してください。ソースコードにはMAX_ARRAY_SIZE という制限があり、計算された新しい容量がこの値を超える場合は特別な処理が行われます。

終わり

ソース コードの分析と ArrayList 拡張戦略の説明を通じて、次の結論を導き出すことができます: ArrayList は容量を拡張するときに 2 倍戦略を採用しており、拡張するたびに現在の容量が 2 倍になり、頻繁な拡張によって引き起こされるパフォーマンスの損失が効果的に軽減されます。同時に、無制限の拡張を防ぐために MAX_ARRAY_SIZE の制限にも注意する必要があります。この知識をマスターすれば、面接で ArrayList 拡張戦略に関する質問に簡単に答えられるようになると思います。

この記事が役立つと思われる場合は、ぜひ「いいね!」を押して共有してください。他に知りたい技術的な質問がある場合は、メッセージを残してお知らせください。一緒に話し合って学ぶことができます~

この記事の内容は学習とコミュニケーションのみを目的としています。間違いや不足がある場合は、修正してください。

ご質問や技術的な共有がある場合は、私の WeChat 公開アカウント「それが何なのか、なぜなのかを知る」をフォローしてください。

おすすめ

転載: blog.csdn.net/en_joker/article/details/132246309