2010-08-26 32 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 

但设置有秩序实际上。