TreeMaps 会自动对键进行排序吗?
Do TreeMaps automatically sort keys?
在使用 HashMap 存储 Player 对象和 Integer 时,我在对 HashMap 进行排序时卡住了,建议使用 TreeMap,在阅读了一些文档之后,它似乎根据钥匙放入。
那么理论上,如果我制作 TreeMap,它会为我对地图进行排序吗?
是的,如果你调用 yourmap.keySet().iterator()
,它 returns 元素根据键升序排列。这是它们的自然顺序或您定义的比较器。
在内部,它可能会像这样使用 Inorder-Traversal:
你看,在每个节点的左子树上,值较小,在右侧,它们较大。因此,如果您首先在左侧列出元素,然后是节点本身,然后是右侧的所有元素,则按升序排列。如果递归地将此规则应用于每个节点,您将收到所需的迭代器。
您可以在 Java here.
中找到有关如何使用它的示例
请记住,HashMap 的查找时间复杂度为 O(1),而 TreeMap 的查找时间复杂度为 O(log(n))。除非你依赖键的顺序,否则你应该喜欢 HashMap 因为它更快。
HashMap-s 不对元素顺序做出任何保证。然而,TreeMap 是作为树结构实现的。 (一棵红黑树,接近平衡)。元素按顺序存储和遍历。与 HashMap 的 O(1) 相比,检索复杂度为 O(log n)。
TreeMap 是按键排序的。 TreeMap 对其键按自然顺序进行排序,它还允许您使用 Comparator 实现自定义排序。我们可以在地图创建时提供比较器,具体取决于使用的构造函数。
在使用 HashMap 存储 Player 对象和 Integer 时,我在对 HashMap 进行排序时卡住了,建议使用 TreeMap,在阅读了一些文档之后,它似乎根据钥匙放入。
那么理论上,如果我制作 TreeMap,它会为我对地图进行排序吗?
是的,如果你调用 yourmap.keySet().iterator()
,它 returns 元素根据键升序排列。这是它们的自然顺序或您定义的比较器。
在内部,它可能会像这样使用 Inorder-Traversal:
你看,在每个节点的左子树上,值较小,在右侧,它们较大。因此,如果您首先在左侧列出元素,然后是节点本身,然后是右侧的所有元素,则按升序排列。如果递归地将此规则应用于每个节点,您将收到所需的迭代器。
您可以在 Java here.
中找到有关如何使用它的示例请记住,HashMap 的查找时间复杂度为 O(1),而 TreeMap 的查找时间复杂度为 O(log(n))。除非你依赖键的顺序,否则你应该喜欢 HashMap 因为它更快。
HashMap-s 不对元素顺序做出任何保证。然而,TreeMap 是作为树结构实现的。 (一棵红黑树,接近平衡)。元素按顺序存储和遍历。与 HashMap 的 O(1) 相比,检索复杂度为 O(log n)。
TreeMap 是按键排序的。 TreeMap 对其键按自然顺序进行排序,它还允许您使用 Comparator 实现自定义排序。我们可以在地图创建时提供比较器,具体取决于使用的构造函数。