我遇到了一个奇怪的情况,学生(我在这种情况下是助教)必须实现他们自己的单链表 (SLL) 版本,并将其与双链表的 Java 标准库实现进行经验比较。
这就是奇怪的地方:我看到多个学生注意到,与包含相同类型元素的相同数量的 SLL 相比,DLL 配置文件的额外空间利用率大约为 0.5%。数据结构的基本分析一直告诉我,SLL 每个节点有 2 个引用(1 个指向下一个元素,1 个指向包含的值),而 DLL 有 3 个(另外一个指向前一个元素的引用)。换句话说,每个节点的空间使用量增加了 50%(不考虑包含值的大小)。
包含的值主要是整数值对象,所以我认为包含的值的大小在这里并不重要。
是什么导致了这2 个数量级的差异?我不完全确定“JVM/集合库优化”可以涵盖全部差异;否则它必须是一个 JVM/java 标准库优化的地狱。