GNU Trove / trove4j TObjectIntHashMap非常适合计算字符串出现次数:
TObjectIntHashMap<Integer> map = new TObjectIntHashMap<>();
map.adjustOrPutValue(string, 1, 1);
现在,常见的任务是请求计数最高的字符串或通过减少计数进行迭代。你会怎么做?
谢谢,
马塞尔
最佳答案
TObjectIntHashMap
中没有对此的特殊操作。要获得具有最大值的条目,请遍历所有条目:
class GetMaxEntry implements TObjectIntProcedure {
Object key;
int value = Integer.MIN_VALUE;
public boolean execute(Object k, int v) {
if (v >= value) {
key = k;
value = v;
}
return true;
}
}
GetMaxEntry getMaxEntry = new GetMaxEntry();
map.forEachEntry(getMaxEntry);
//process(getMaxEntry.key, getMaxEntry.value);
要通过减少计数进行迭代,唯一可以做的就是使用相同的
AbstractMap.SimpleImmutableEntry
操作将条目转储到forEachEntry
(或带有原始值字段的特殊Entry类)的集合或数组中,然后按Collections.sort()
或具有自定义Arrays.sort()
的Comparator
。