Java TreeMap获得Kth最小的密钥

时间:2014-08-09 09:56:41

标签: java performance treemap

我正在使用TreeMap并希望得到Kth最小的密钥。 我写了以下实现:

public static Long kthKey(TreeMap<Long, MyObject> treeMap, int kth) {
    Long currentKey = treeMap.firstKey();
    for (int i = 1; i < kth; i++) {
        currentKey = treeMap.higherKey(currentKey);
    }
    return currentKey;
}

这在内存方面非常有效,但可能不是在运行时间方面。

有更有效的方法吗?

1 个答案:

答案 0 :(得分:2)

如果允许使用迭代器,则可以执行此操作。

public <T> static Long kthKey(Map<T, ?> map, int kth) {
    for(T key: map.keySet())
       if(kth-- < 1) return key;
    return null;
}

一个迭代器的成本不是很高,如果你需要避免这种情况,我建议你看看如何调用这个方法并优化它。说你有

for (int k = 0; k < mapsize(); k++) {
    Long l = kthKey(map, k);

您可以根本不需要调用此方法。