2

GNU Trove / trove4j TObjectIntHashMap 非常适合计算字符串出现次数:

TObjectIntHashMap<Integer> map = new TObjectIntHashMap<>();
map.adjustOrPutValue(string, 1, 1);

现在一个常见的任务是请求具有最高计数的字符串或通过减少计数进行迭代。你会怎么做?

谢谢你,马塞尔

4

2 回答 2

2

中对此没有特殊操作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使用相同的操作将条目转储到一个集合或数组中,例如 s(或具有原始值字段的特殊 Entry 类)forEachEntry,然后按Collections.sort()Arrays.sort()使用 custom排序Comparator

于 2014-04-09T14:45:38.050 回答
1

正如@leventov 所说,您目前需要遍历整个集合,因为Trove 中目前不存在排序集合。这里有一个功能请求,如果您对此感兴趣,您可以投票。

于 2014-04-09T17:05:53.363 回答