2012-12-07 98 views
9

有人可以告诉我何时和为什么要使用TREEMAP。我通过This link 但没有找到我的答案。为什么以及何时使用TreeMap

按照我的想法,我们使用treemap来根据您的密钥来获取数据排序,我们也可以通过其他方式来实现数据排序。

+1

还有其他方法,但这是最简单的。你有什么其他方式建议对键值对进行排序? – jlordo

+0

“按照我的想法,我们使用treemap根据您的密钥来获取数据排序,我们也可以通过其他方式来实现数据排序。” - 确切! – xagyg

+0

@jlordo比较和比较器接口。 –

回答

4

TreeMap

红黑树基于NavigableMap实现。该地图根据其按键的自然顺序或在地图创建时提供的比较器进行排序,具体取决于使用哪个构造函数。

此实现为containsKey,get,put和remove操作提供了有保证的log(n)时间成本。算法是Cormen,Leiserson和Rivest的算法简介中的算法的改编。

使用,当你需要订购的关键不仅提升这个数据结构,你可以通过comparator同构造函数TreeMap(Comparator<? super K> comparator)写自己的排序逻辑。它也是一种自平衡二叉搜索树。

6

您链接到的javadoc明确指出它是navigablesorted映射接口的实现。当你需要这个功能时你会使用它。

3

这是有效的方式,让对象按某个键排序,而且随机访问对您很重要。有了这个数据结构,你可以按顺序迭代。

如果不需要随机访问,那么应该使用排序的集合/包或列表。

Why is there no SortedList in Java?

14

比方说,你想实现一个字典,并以字母顺序打印出来,你可以使用一个TreeMap的组合和一个TreeSet:

public static void main(String args[]) { 
    Map<String, Set<String>> dictionary = new TreeMap<>(); 
    Set<String> a = new TreeSet<>(Arrays.asList("Actual", "Arrival", "Actuary")); 
    Set<String> b = new TreeSet<>(Arrays.asList("Bump", "Bravo", "Basic")); 

    dictionary.put("B", b); 
    dictionary.put("A", a); 

    System.out.println(dictionary); 
} 

所有排序是自动完成的,它打印:

{A = [实际,精算,到达],B = [基本,布拉沃,凹凸]}

您当然也可以手动排序结构,但使用TreeMap/Set可以更高效,减少代码行数(=错误数)并且更具可读性。

相关问题