【发布时间】:2013-09-04 18:37:17
【问题描述】:
我想我正在寻找一个稀疏数组实现,但我确实需要它在内存使用方面是有效的,并且实现可以利用的我的数据的一个特点是索引的填充使得如果存在索引i 的值,则索引i-1 和i+1 也可能存在值,类似地,如果i 的值不存在,i-1 和i+1可能不存在值。
我正在使用 Java,我需要索引类型为 long,而不是更常见的 int,如果这会有所不同的话。我有大约 5000 万个对象需要存储。我查看了 Trove4J 的TLongObjectHashMap,不幸的是,仅哈希表就需要大约 1.6GB,我真的需要改进。
谁能指出我可以针对长期顺序分配的标识符进行优化的方法?插入/获取的对数性能对我来说是可以接受的,所以也许是基于树的?
【问题讨论】:
-
我对 Trove4J 不熟悉,那 1.6 GiB 的哈希表从何而来?对于 80% 的负载因子和 64 位引用,开放寻址哈希表应适合 915 MiB(5000 万 * 1.2 * (64 + 64) 位)。如果您显式存储所有键和引用(似乎是良好性能所必需的),则信息理论最小值为 5000 万 * (64 + 64) 位 = 762 MiB。
-
需要哪些操作?什么运行时复杂度?
标签: java data-structures