2010-08-26 90 views
8

從樹狀圖實例調用的entrySet()函數是否返回條目的TreeSet或只是一組條目?是否確保順序?TreeMap的entrySet()是否返回TreeSet

而不是將它作爲一組條目獲取如何獲取條目列表的順序?

+0

你是否確實是指'TreeSet',或者只是一個具有特定行爲的'Set'? – skaffman 2010-08-26 07:14:40

+0

我只是表示它是否按排序順序排列。 – Emil 2010-08-26 07:47:32

+0

@Emil它看起來像從集合返回的條目集合具有自然排序.... – Victor 2015-08-22 16:23:09

回答

7

這是相反的:TreeSet在內部使用TreeMap。 (見TreeSet docs的第一句)

沒有太多的Sun Java源代碼,我可以在網絡上找到鏈接,但這裏有一些老氣版本:

如您所見,TreeMap定義了一個名爲TreeMap.EntrySet的內部類,它只是擴展了AbstractSet。不,它不執行SortedSet(否則可能由SortedMap.entrySet()合同指定)。

但回答實際問題:是的,訂單是按照SortedMap.entrySet()合同中的規定來確保的。


更新:更新對Java 8 JavaDoc的鏈接,來源仍然是Java 6的

5

JavaDoc

public Set<Map.Entry<K,V>> entrySet()

返回包含在此映射中的映射關係的Set視圖。 該集合的 迭代器按照升序鍵順序返回條目。

+0

這不會使它成爲TreeSet,而是(我不能認爲這是理所當然的)SortedSet。 – Riduidel 2010-08-26 07:01:56

+3

對,它定義了一個有序集合,但不一定是'java.util.SortedSet'或甚至一個TreeSet。 – 2010-08-26 07:05:20

0
Assert.assertFalse(new TreeMap().keySet() instanceof SortedSet); 
Assert.assertFalse(new TreeMap().keySet() instanceof TreeSet); //no need to assert 

但設置有秩序實際上。