2016-05-15 25 views
0

我想知道,如何獲取TreeMap中的密鑰,以獲取該密鑰的信息?例如,我宣佈一個TreeMap這樣的:TreeMap,如何獲取密鑰以獲取其信息

TreeMap miniDictionary = new TreeMap<DictionaryTerm,Integer>(new TermComparator()); 

DictionaryTerm只是一個簡單的類,它只有兩個變量,「字符串術語」和「INT號」。

TermComparator是一類比較兩個鍵:

class TermComparator implements Comparator<DictionaryTerm> { 

@Override 
public int compare(DictionaryTerm e1, DictionaryTerm e2) { 
    return e1.getTerm().compareTo(e2.getTerm()); 
} 

}

假設映像樹早已像這樣的條目:( 「齊柏林飛船」,55) - > 25 其中( LedZeppelin,55)是關鍵和價值。

現在讓我們說我有這個變量:

DictionaryTerm aTerm = new DictionaryTerm("LedZeppelin",100); 

我怎樣才能找到樹形圖「aTerm」,並獲得關鍵它來閱讀它的信息?考慮到我創建的TermComparator,按字符串術語進行比較。

非常感謝。

回答

2

我想你有興趣從TreeMap得到相當於aTerm的密鑰,因爲獲得該值很容易(miniDictionary.get(aTerm))。

要獲得密鑰,您可以使用floorKey()。此方法返回「的最大鍵小於或等於給定鍵,返回null如果沒有這樣的關鍵」,所以你必須檢查null和平等第一:

TermComparator termComparator = new TermComparator(); 
    TreeMap<DictionaryTerm, Integer> miniDictionary = new TreeMap<>(termComparator); 
    miniDictionary.put(new DictionaryTerm("LedZeppelin", 55), 25); 

    DictionaryTerm aTerm = new DictionaryTerm("LedZeppelin",100); 
    DictionaryTerm floorKey = miniDictionary.floorKey(aTerm); 
    if (floorKey != null && termComparator.compare(aTerm, floorKey) == 0) { 
     System.out.println(floorKey.getNumber()); // prints 55 
    } 

如果你想同時獲得鍵和值,使用floorEntry()

+0

非常感謝,儘管我沒有清楚地解釋我自己,但你釘了它並給出了一個很好的答案。謝謝。只是一件事,什麼是dictionaryTerm?在System.out.println()中;它應該是floorKey嗎? –

+0

是的,對不起,應該是floorKey – Mifeet