簡體   English   中英

Java TreeMap獲得第K個最小鍵

[英]Java TreeMap get Kth smallest key

我正在使用TreeMap,並希望獲取第K個最小鍵。 我編寫了以下實現:

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;
}

就內存而言,這是非常有效的,但就運行時間而言可能並非如此。

有沒有更有效的方法可以做到這一點?

如果允許使用迭代器,則可以執行此操作。

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);

您完全不需要調用此方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM