为什么以及何时使用TreeMap

时间:2012-12-07 11:07:47

标签: java collections treemap

有人可以告诉我何时以及为何使用 TREEMAP 。我经历了This link 但没有找到我的答案。

根据我的想法,我们使用treemap根据您的密钥对数据进行排序,同样我们也可以通过其他方式实现。

4 个答案:

答案 0 :(得分:21)

假设您要实现字典并按字母顺序打印,可以使用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可以提高效率,减少代码行数(=错误数量)并且更具可读性。

答案 1 :(得分:6)

您链接到的javadoc,明确指出它是navigablesorted地图接口的实现。您需要此功能时使用它。

答案 2 :(得分:4)

TreeMap

  

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

     

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

当您需要有序键时,使用此数据结构,不仅可以升序,还可以将comparator传递给构造函数TreeMap(Comparator<? super K> comparator)来编写自己的排序逻辑。它也是一种自平衡二叉搜索树。

答案 3 :(得分:4)

通过某些键对对象进行排序是有效的方式,随机访问对您来说也很重要。使用此数据结构,您可以按顺序迭代。

如果不需要随机访问,则使用有序集/包或列表。

Why is there no SortedList in Java?