如果我的地图需要小而不是快,我应该使用 Map 的哪种实现?

2024-04-15

我习惯使用HashMap在我的程序中,因为我知道它通常是最有效的(如果使用得当)并且可以轻松处理大型地图。我知道关于EnumMap这对于枚举键非常有用,但我经常生成一个小地图,它永远不会变得很大,很可能很快就会被丢弃,并且没有并发问题。

Is HashMap<K,V>对于这些小型、本地和临时用途来说太复杂了吗?在这些情况下我可以使用另一种简单的实现吗?

我想我正在寻找一个Map实现类似于ArrayList for List。它存在吗?


稍后在回复后添加:

在这个场景中,缓慢但非常简单的实现可能会更好——当我有很多这样的东西时Maps。例如,假设我有大约一百万张这样的小地图,每张地图都有少量(通常少于三个)条目。我的参考率很低——也许在大多数情况下我在它们被丢弃之前实际上并没有参考它们。现在还是这样吗HashMap对他们来说是最好的选择吗?

资源利用率不仅仅是速度——例如,我想要一些不会使堆碎片过多并使 GC 花费很长时间的东西。

可能是这样HashMap是正确的答案,但这不是过早优化的情况(或者至少可能不是)。


经过一番思考后添加:

我决定自己编写代码SmallMap。很容易制作一个AbstractMap。我还添加了几个构造函数,以便SmallMap可以从现有的Map.

一路上我必须决定如何代表Entry并实施SmallSet为了entrySet method.

我通过编码(以及单元测试)学到了很多东西,并且想分享这个,以防其他人想要。它在github上here http://github.com/Zteve/SmallCollections.


没有标准的小实现Map在爪哇。HashMap是最好、最灵活的之一Map周围的实现,并且很难被击败。然而,在非常小的需求领域(堆的使用和构建速度至关重要),可以做得更好。

我已经实施了小收藏 http://github.com/Zteve/SmallCollections在 GitHub 上演示如何完成此操作。我会love关于我是否成功的一些评论。绝对不能确定我有。

尽管这里提供的答案有时很有帮助,但总的来说,他们往往会误解这一点。无论如何,最终,回答我自己的问题比被问到问题对我有用得多。

这里的问题已经达到了目的,这就是为什么我“自己回答”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我的地图需要小而不是快,我应该使用 Map 的哪种实现? 的相关文章

随机推荐