Scala(或Java)中的自适应映射保留插入顺序
我想找到并重用(如果可能的话)具有以下属性的map实现:
>虽然条目数量很少,但说< 32,底层存储应该在这样的数组中完成[key0,val0,key1,val1,...]这种存储方案可以避免许多小的Entry对象,并提供极快的查找(即使它们是顺序扫描!)现代CPU由于CPU的缓存未被无效以及缺少指针间接到堆中. 我们正在研究Scala中大量(数百万个节点/边缘)图形的内存表示,并且使用这样的Map可以让我们以更高效的方式存储节点/边缘属性以及每个节点的边缘,达到99%具有少量属性或邻居的节点和边缘,同时保留属性和边缘的按时间顺序的插入顺序. 如果有人知道具有这些特征的Scala或Java地图,我将非常感激. 感谢名单 解决方法
虽然我不知道任何完全符合您要求的实现,但您可能有兴趣在Jakarta Commons库中查看
Flat3Map(
source).
不幸的是,Jakarta库已经过时了(例如,在最新的稳定版本中不支持泛型,虽然它很有希望看到这在行李箱中有所改变)而且我通常更喜欢Google Collections,但是值得你花时间去看看Apache如何实现的东西. 不幸的是,Flat3Map不保留键的顺序,但我对你的原帖有建议.我建议使用并行数组,而不是将键和值存储在单个数组中,如[key0,…].也就是说,一个数组带有[key0,…],另一个带有[val0,…].通常我不是并行数组的支持者,但至少这样你可以有一个K类型的数组,你的密钥类型,另一个类型为V的数组,你的值类型.在Java级别,它有自己的一组瑕疵,因为你不能使用语法K [] keys = new K [32];相反,你需要使用a bit of typecasting. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |