首页 > 解决方案 > TreeMaps 会自动对键进行排序吗?

问题描述

在使用 HashMap 存储 Player 对象和 Integer 时,我在对 HashMap 进行排序时卡住了,建议使用 TreeMap,在阅读了一些文档后,似乎它根据输入的键对地图进行了排序。

所以理论上,如果我制作了 TreeMap,它会为我排序地图吗?

标签: javaminecraftbukkittreemap

解决方案


是的,如果您调用yourmap.keySet().iterator(),它会根据键以升序返回元素。这是它们的自然顺序或您定义的比较器。在内部,它可能会像这样使用 Inorder -Traversal
https://en.wikipedia.org/wiki/Tree_traversal

您会看到,每个节点的左子树上的值较小,而右侧的值较大。因此,如果您首先列出左侧的元素,然后是节点本身,然后是右侧的所有元素,则按升序排列。如果您递归地将此规则应用于每个节点,您将收到您想要的迭代器。

您可以在此处找到有关如何在 Java 中使用它的示例。

请记住,HashMap 的查找时间为 O(1),但 TreeMap 的查找时间为 O(log(n))。除非您依赖键的顺序,否则您应该使用 HashMap,因为它更快。


推荐阅读