【发布时间】:2009-03-11 04:13:21
【问题描述】:
我在常见的地方(apache commons、google)都找过,但找不到...
它应该是开源的。
几乎是在寻找一个基于链表的。用例是 10'000 的地图,其中的值不一定很多。它不需要按比例放大,因为当它变得太大时我可以转换它。
一些数字,大小使用一些计算出来的jvm值(8bytes/java.lang.Object, 4bytes/ref)HashMap大约是100+32n字节,理论上最好是12+20*n。
【问题讨论】:
-
我认为基于链表的地图不会是“最小的”。我会在没有 Entry 对象的情况下创建一个基于数组的数组(即,值直接存储在数组中)。这意味着碰撞会变得很糟糕,但有一些方法可以解决这个问题。
-
上周我完全实现了这个地图(所以你并不孤单)。不幸的是,实现不是开源的。我设法将地图所需的大小减少到 16(对于地图对象)+ 16(对于数组;四舍五入)+ 8 *
size(对于数组内容)。这是您可以获得的最低内存使用量,除非您想仅使用静态方法直接对数组进行操作,这将为每个映射节省另外 16 个字节。但在那种情况下,它就不再是Map接口的实现了。
标签: java optimization collections