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

07-24 22:17