加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala(或Java)中的自适应映射保留插入顺序

发布时间:2020-12-16 08:53:27 所属栏目:安全 来源:网络整理
导读:我想找到并重用(如果可能的话)具有以下属性的map实现: 虽然条目数量很少,但说 32,底层存储应该在这样的数组中完成[key0,val0,key1,val1,...]这种存储方案可以避免许多小的Entry对象,并提供极快的查找(即使它们是顺序扫描!)现代CPU由于CPU的缓存未被无效以
我想找到并重用(如果可能的话)具有以下属性的map实现:

>虽然条目数量很少,但说< 32,底层存储应该在这样的数组中完成[key0,val0,key1,val1,...]这种存储方案可以避免许多小的Entry对象,并提供极快的查找(即使它们是顺序扫描!)现代CPU由于CPU的缓存未被无效以及缺少指针间接到堆中.
>无论与LinkedHashMap类似的条目数量如何,映射都应保持键/值对的插入顺序

我们正在研究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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读