Ste*_*ell 29 java collections dictionary
我习惯性地HashMap在我的程序中使用,因为我知道它通常是最有效的(如果使用得当)并且可以轻松应对大型地图.我知道EnumMap哪个对于枚举键非常有用,但是我经常会生成一个永远不会很大的小地图,很快就会被丢弃,并且没有并发问题.
HashMap<K,V>这些小型,本地和临时用途是否过于复杂?在这些情况下,我可以使用另一个简单的实现吗?
我想我在寻找一个Map它类似于实施ArrayList的List.它存在吗?
在回复之后添加:
这是一个缓慢但非常简单的实现可能更好的场景- 当我有很多很多这样Map的时候.例如,假设我有一百万左右的这些微小的小地图,每个地图都有少量(通常少于三个)条目.我的参考率很低 - 也许我实际上并没有在大部分时间丢弃之前引用它们.它仍然HashMap是最好的选择吗?
资源利用率不仅仅是速度 - 例如,我想要的东西不会破坏堆积很多并且使GC需要很长时间.
这可能HashMap是正确的答案,但这不是过早优化的情况(或者至少可能不是).
经过一番思考后添加了很多:
我决定手工编写自己的代码SmallMap.很容易制作一个AbstractMap.我还添加了几个构造函数,以便SmallMap可以从现有构造中构造Map.
在此过程中,我不得不决定如何表示Entrys并实现SmallSet该entrySet方法.
我通过编码(并对其进行单元测试)学到了很多东西,并希望分享这个,以防其他人想要一个.它在github 这里.
Ste*_*ell 19
MapJava中没有标准的小实现. HashMap是最好,最灵活的Map实现之一,很难被击败.但是,在非常小的需求区域 - 堆使用和构造速度至关重要 - 可以做得更好.
我已经在GitHub上实现了SmallCollections来演示如何做到这一点.我会喜欢一些关于我是否成功的评论.我无法确定.
虽然这里提供的答案有时是有帮助的,但总的来说,他们倾向于误解这一点.无论如何,回答我自己的问题,最终对我来说比给予一个更有用.
这里的问题已经达到了目的,这就是为什么我"自己回答"了.
hvg*_*des 12
我认为这是不成熟的优化.你有记忆问题吗?创建太多地图会导致性能问题?如果不是,我认为HashMap没问题.
此外,看看API,我没有看到比a更简单的东西HashMap.
如果您遇到问题,可以使用自己的Map实现,它具有非常简单的内部功能.但是我怀疑你会比默认的Map实现做得更好,而且你需要确保新类工作的开销.在这种情况下,您的设计可能存在问题.
| 归档时间: |
|
| 查看次数: |
24430 次 |
| 最近记录: |