为什么Java Collection Framework不包含树和图

卢声远*_* Lu 45 java collections tree graph

我熟悉Java Collection Framework,它包含基本的接口:CollectionMap.我想知道为什么框架不包含作为基本集合的树和图形的结构.两者都可以视为子类型Collection.

顺便说一句,我知道TreeSet是由Red-Black Tree底层实现的.但是,TreeSet它不是树而是a Set,因此框架中没有真正的树.

aio*_*obe 27

我想知道为什么框架不包含作为基本集合的树和图形的结构.两者都可以视为子类型Collection.

这是一个很好的问题.我认为这简直归结为范围界定.Collections API提供的核心功能包括:

  • 迭代顺序:列表和有序映射具有指定的迭代顺序,大多数集不具有.

  • 重复:列表允许重复,集合不允许

  • index:列表值由整数索引,映射值由其他对象索引.

这让我们走得很远,我认为Joshua Bloch等人认为,更多功能丰富的集合(图形和树木需要元素之间的内部关系,具有多重性的集合,双向映射......)可以在这三个之上实现核心功能,因此在图书馆中更好.


scr*_*avy 12

java.util软件包包含用于组织任何类型数据的数据结构.它基本上处理与抽象数据结构(如List,Set,Map),其通过它们的方法和行为定义(例如,集确实包含两次没有元素,一个列表保持顺序和允许重复,等等).

作为开发人员,您可以自由选择这些数据结构的哪种实现最适合您处理的数据类型(HashSet与TreeSet/LinkedList与ArrayList /等).例如,对于集合和映射,您可以选择基于散列的实现和基于树的实现,这些实现可能适合您想要做的事情(在大多数情况下,基于散列的实现将是最佳选择,有时候,当顺序很重要时,树可能更适合您的需求 - 另请参阅HashSet vs TreeSet(此处为Stackoverflow)).

如果您将树视为一种特殊的图形(它是),那么您对应用于图形的特定属性感兴趣,而不是对一般的集合感兴趣(基本上是列表,并且反过来使用实现图形之类的东西.

如本主题所述,如果您对Graphs建模感兴趣,那么Graph库有很多选择.我个人可以推荐JGraphT.

我不知道为什么 JDK中没有图形库(我不知道这是否是一件好事?),但我想Sun决定将其留给开发人员,因为大多数需要图形的应用程序也需要非常独特的实现.


Ste*_*n C 6

我怀疑答案是它是两件事的组合:

  • 通用树或图形界面将"功能差".
  • 使用字段来表示子和(如果需要)父指针,实现树或图更容易,更有效.

请注意,Apache commons或Google commons都没有通用的图形或树支持.但是,我确实遇到了几个通用的树/图层次结构: