我正在使用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;
}
这在内存方面非常有效,但可能不是在运行时间方面。
有更有效的方法吗?
答案 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);
您可以根本不需要调用此方法。