私はプリンストンCoursera MOOCのビデオ講義を見ました:アルゴリズムの紹介はhereです。 ArrayList
のような構造のサイズを変更して要素を追加または削除する際のコストについて説明しています。私たちのデータ構造にサイズ変更を提供したい場合は、add
とremove
操作では、O(n)
からamortized O(n)
になります。Java ArrayListsが自動的に縮小されないのはなぜですか
私はJavaのArrayList
を数年間使用しています。私はいつも彼らが自動的に成長し縮小することを確信してきました。最近、私の大きな驚きに、私はthis postで間違っていることが判明しました。 Java ArrayList
は、自動的に縮小しません。ここで
は私の質問です:私の意見では
は、パフォーマンスがすでに
amortized O(n)
あるようArrayList
Sに縮小することは害がありません提供します。なぜJavaクリエイターはこの機能をデザインに含まなかったのですか?私は
HashMap
のような他のデータ構造も自動的に縮小しないことを知っています。自動縮小をサポートする配列の上にビルドされているJavaの他のデータ構造はありますか?他の言語ではどのような傾向がありますか?リスト、辞書、地図、Python/C#などのセットの場合のように、自動縮小はどのように見えますか?Javaが行うのとは逆の方向に進むと、私の質問は:なぜですか?
コンテナを縮小することの欠点は、要素を追加した場合に再度拡大する必要があることです。あなたがあなたのリストから要素を削除しただけで、ライブラリはまだあなたがその領域を必要としないと仮定することはできません。私は、自動的に縮小する 'ArrayList'のような配列ラッパーを認識していないので、そうすることを見つけるのは非常に驚きです。'ArrayList'ユーザがあなたのリストの容量を減らすことができたら、[' trimToSize() '](https://docs.oracle.com/javase/7/docs/api/java/util)を使うことができます/ArrayList.html#trimToSize())。 – khelwood
私はもっと多くの作業が必要だと理解していますが、ビデオで提示されているように、自動縮小を行うと、「いいえ」を失います。 'add'と' remove'の複雑さはまだ '' amortizedO(n) '' – GA1
btwです。もし誰かが '-1'を与えたら建設的なフィードバックを読んでみたいと思います。 – GA1