Вариант подхода MutableInt, который может быть даже более быстрым, если что-то вроде хака, заключается в использовании одноэлементного массива int:
Map<String,int[]> map = new HashMap<String,int[]>();
...
int[] value = map.get(key);
if (value == null)
map.put(key, new int[]{1} );
else
++value[0];
Было бы интересно, если бы вы могли повторно запустить тесты производительности с этим вариантом. Это может быть самый быстрый.
Редактировать: вышеописанный шаблон работал хорошо для меня, но в конце концов я перешел на использование коллекций Trove для уменьшения объема памяти на некоторых очень больших картах, которые я создавал - и в качестве бонуса это также было быстрее.
Одна действительно приятная особенность заключается в том, что класс TObjectIntHashMap
имеет один вызов adjustOrPutValue
, который, в зависимости от того, имеется ли уже значение в этом ключе, либо установит начальное значение, либо увеличит существующее значение. Это идеально подходит для увеличения:
TObjectIntHashMap<String> map = new TObjectIntHashMap<String>();
...
map.adjustOrPutValue(key, 1, 1);