我熟悉Java Collection Framework,它包含了基本的接口:Collection和Map。我想知道为什么框架不包含像Tree和Graph这样的基本集合结构。两者都可以看作是Collection的子类型。
顺便说一下,我知道TreeSet是由红黑树底层实现的。但是,TreeSet不是树而是Set,所以框架中没有真正的树。
发布于 2011-02-12 22:35:44
我想知道为什么框架不包含像树和图这样的基本集合的结构。两者都可以看作是
Collection__的子类型。
这是一个好问题。我认为这可以简单地归结为作用域。Collections API为其提供类的核心功能是:
这让我们走得很远,我假设Joshua Bloch等人认为更多的功能丰富的集合(需要元素之间的内部关系的图形和树,具有多重性的集合,双向映射,等等)可以在这三个核心特性之上实现,因此在库中更好。
发布于 2011-02-13 00:33:40
java.util包包含用于组织任何类型数据的数据结构。它主要处理通过其方法和行为定义的抽象数据结构(如List、Set、Map) (例如,一个集合不包含两次元素,一个列表维护顺序并允许重复,等等)。
作为开发人员,您可以自由选择这些数据结构的哪种实现最适合您处理的数据类型(HashSet、TreeSet / LinkedList、ArrayList /等等)。例如,对于See和may,您可以在基于散列的实现和基于树的实现之间进行选择,这可能适合也可能不适合您想要做的事情(在大多数情况下,基于散列的实现将是最佳选择,而有时,当顺序很重要时,树可能更适合您的需要-另请参阅HashSet vs TreeSet (here at Stackoverflow))。
如果你认为树是一种特殊的图(它确实是),那么你感兴趣的是应用于图的特定属性,而不是一般的集合(本质上,集合是列表,反过来又用于实现像图这样的东西)。
正如本文中提到的,如果您对图形建模感兴趣,那么有很多图形库可供选择。就我个人而言,我可以推荐JGraphT。
我不知道为什么JDK中没有图形库(我也不知道这样问是不是一件好事?),但我猜Sun决定把这个问题留给开发人员,因为大多数需要图形的应用程序也需要非常独特的实现。
发布于 2011-02-12 22:51:04
我怀疑答案是两件事的组合:
请注意,Apache commons和Google commons都不支持通用图形或树。然而,我确实遇到了几个通用的树/图层次结构:
framework.
https://stackoverflow.com/questions/4978487
复制相似问题