用Java增加Map值的最有效方法
我希望这个问题对于本论坛来说不是太基本了,但是我们会看到的。 我想知道如何重构一些代码以获得更好的性能,而这些性能已经运行了很多次。 假设我正在使用地图(可能是HashMap)创建一个单词频率列表,其中每个键是一个带有要计算单词的String,并且值是一个Integer,每次找到该单词的标记时都会增加。 在Perl中,增加这样的值非常容易: $map{$word}++; 但是在Java中,它要复杂得多。 这是我目前的操作方式: int count = map.containsKey(word) ? map.get(word) : 0; map.put(word, count + 1); 当然,哪个依赖于较新的Java版本中的自动装箱功能。 我想知道您是否可以建议一种更有效的递增此值的方法。 避开Collections框架并改用其他东西,甚至有良好的性能原因吗? 更新:我已经测试了几个答案。 见下文。 #1楼 一些测试结果 对于这个问题,我已经得到了很多很好的答案-谢谢大家-因此,我决定进行一些测试,找出哪种方法实际上最快。 我测试的五种方法是: 我在 问题中 介绍的“ ContainsKey”方法 Aleksandar Dimitrov建议的“ TestForNull”方法 Hank Gay建议的“ AtomicLong”方法 jrudolph建议的“激励”方法 phax