为什么Java Collections API没有树实现
出于好奇,我最近不得不为我的一个程序使用一棵树,我不得不自己构建一棵二叉树,但是为什么Collections API没有树(甚至是二叉树)的默认实现呢为什么Java Collections API没有树实现,java,data-structures,collections,Java,Data Structures,Collections,出于好奇,我最近不得不为我的一个程序使用一棵树,我不得不自己构建一棵二叉树,但是为什么Collections API没有树(甚至是二叉树)的默认实现呢 我认为他们决定不将其包括在collections API中应该有很强的理由。
我认为他们决定不将其包括在collections API中应该有很强的理由。
- 通用性足以覆盖广泛的用例,以及
- 非常有用,足以补偿常规的性能开销李>
TreeTraverser
和BinaryTreeTraverser
类的形式提供了树支持。但这可能不是你所期望的。事实上,这些类实际上并没有实现树数据结构。相反,您必须在泛型类型参数中执行此操作。除此之外,Traverser
类甚至避免对节点类型的API进行假设。它们是抽象类,需要具体的遍历器子类型来实现查询树的操作;e、 g.获取节点的子节点
FWIW、
TreeMap
和TreeSet
不是“树API”。它们是Map
和Set
api的基于树的实现。公共API完全隐藏了树的特性,使得这两个类完全不适合作为通用树使用。TreeSet和TreeMap是由二叉树支持的两个集合。我不仅仅谈论二叉树,为什么我们不使用一个通用的树实现,一个树接口呢?有很多外部库,它提供了这种功能,相反,它可以包含在Collections API中,我的问题是为什么它没有作为java的Collections API中的通用数据结构包含。你需要问问James Gosling。这里没有人能以任何权威回答你的问题。任何人要说的话都只是猜测和意见。@BrianRoach而不是James gosling。我们需要问Joshua Bloch:)我知道TreeMap是存在的,但它是一种更具体的树数据结构形式,为什么我们不像List和Set那样有一个更通用的树实现呢。为什么集合API的创建者决定不给出树的一般形式。?也许他们可以给出一个接口树及其实现,如BinaryTree、AVLTree、RedBlackTree?我同意Artem Zh的回答。树只是一种特定形式的数据结构,用于保存实体的“集合”。集合不是由它们的数据结构定义的,而是它们在插入、删除和查找方面的性能承诺。实现的细节应该是无关紧要的,您可以根据您的使用需求来选择容器。例如,如果您需要一个容器,其中元素总是被排序的,并且查找应该是O(logn),那么您需要一个Set或SortedMap。实现如何满足性能保证并不重要,我不同意。集合由其合同定义Set
s不保证顺序(因此没有索引访问),但保证不重复<代码>列表s担保顺序,但允许重复<代码>映射s包括元素之间的关系。事实上,您可以使用树来实现其中的一些(全部?)是不相关的。例如,您可以使用列表
来实现集
(例如LinkedHashSet
)。实现树的方法也不止一种。