为什么以及何时使用TreeMap

Jav*_*ert 19 java collections treemap

有人能告诉我何时以及为何使用TREEMAP.我经历了这个链接, 但没有找到我的答案.

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

ass*_*ias 22

假设你想要实现一个字典并按字母顺序打印它,你可以使用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);
}
Run Code Online (Sandbox Code Playgroud)

所有排序都自动完成并打印:

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

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


Dav*_*oko 6

您链接到的javadoc,清楚地表明它是可导航排序的映射接口的实现.您需要此功能时使用它.


Ale*_*lak 6

这是使对象按某个键排序的有效方法。如果随机访问对您来说也很重要,那么TreeMap就是答案。使用此数据结构,您可以按顺序进行迭代。

如果不需要随机访问,则使用已排序的集合/袋子或列表。

为什么Java中没有SortedList?


Sub*_*der 4

树形图

基于红黑树的 NavigableMap 实现。映射根据其键的自然顺序进行排序,或者通过映射创建时提供的比较器进行排序,具体取决于使用的构造函数。

此实现为 containsKey、get、put 和 remove 操作提供有保证的 log(n) 时间成本。算法改编自 Cormen、Leiserson 和 Rivest 的《算法导论》中的算法。

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