当前位置:  开发笔记 > 编程语言 > 正文

以块的形式读取ConcurrentHashMap(或类似的)

如何解决《以块的形式读取ConcurrentHashMap(或类似的)》经验,为你挑选了1个好方法。

我有一个程序,有一个ConcurrentHashMap不同的线程可以添加/删除地图中的项目.

我很想知道在25个项目中读取地图的最佳方法是什么.我想要做的是这样的:用户点击按钮并从地图中读取25个项目(与订单无关).之后,他可以单击"下一步"按钮并读取另外25个项目(与前25个项目不同),依此类推.

我不确定我是否可以这样做ConcurrentHashMap.我不想使用数据库,我想把它保存在内存中.我不认为转换Map成一个ArrayList会有帮助,因为大多数时候都会在地图中添加/删除项目.

我愿意接受任何解决方案,甚至是第三方库.

更新:我也没有被束缚ConcurrentHashMap.我只是在寻找最好的解决方案

更新2:他们的钥匙是String

谢谢



1> apangin..:

在您的情况下,由于String键是严格排序的,因此ConcurrentSkipListMap是一种方法.

它既可以并发也可以导航,并且可以经常用来代替ConcurrentHashMap.

get// putremove一样快O(log N).

作为奖励,您将获得免费的自然遍历订单.

要从ConcurrentSkipListMap获取下一页,请tailMap使用上一页的最后一个键作为锚点进行调用,然后从结果子图中构造迭代器或流:

    return map.tailMap(lastKey, false).entrySet()
            .stream()
            .limit(pageSize)
            .collect(Collectors.toList());

请注意,tailMap即使从地图中删除了锚键,也会成功.迭代将从大于锚点的下一个键开始.


如果密钥没有严格排序,或者需要O(1)复杂度,那么您可能更喜欢另一种建议 - 以单元索引的顺序遍历的开放寻址哈希表.但是,标准Java类中没有这样的实现.这种映射的线程安全性通常通过锁定来实现.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有