私は、学生 (私はこのコンテキストではティーチング アシスタントです) が独自のバージョンの単方向リンク リスト (SLL) を実装し、それを二重リンク リストの Java 標準ライブラリ実装と経験的に比較しなければならないという奇妙な状況に遭遇しました。
そして、それが奇妙なところです.複数の学生が、同じタイプの同じ数の要素を含む SLL と比較して、DLL プロファイルが約 0.5% 余分なスペース使用率であることに気付いているのを見てきました。データ構造の基本的な分析では、SLL にはノードごとに 2 つの参照 (次の要素への 1 つと含まれる値への 1 つ) があるのに対し、DLL には 3 つ (前の要素への追加の 1 つの参照) があることがわかります。つまり、ノードあたりのスペース使用量が 50% 増加します (含まれる値のサイズを無視します)。
含まれる値はほとんどが整数値オブジェクトなので、含まれる値のサイズはここではあまり重要ではないと思います。
この2 桁の違いの原因は何ですか? 「JVM/コレクションライブラリの最適化」がすべての違いをカバーできるかどうかは完全にはわかりません。そうでなければ、JVM/Java std lib の最適化の地獄にならなければなりません。