为什么 Java 集合框架不包含树和图形

2022-08-31 17:21:12

我熟悉Java集合框架,它包含基本接口:和。我想知道为什么框架不包含树和图等结构,它们是基本集合。两者都可以视为 的子类型。CollectionMapCollection

顺便说一句,我知道是由红黑树底层实现的。但是,它不是树而是 ,因此框架中没有真正的树。TreeSetTreeSetSet


答案 1

我想知道为什么框架不包含树和图等结构,它们是基本集合。两者都可以被视为集合的子类型。

这是一个好问题。我认为它只是归结为范围界定。集合 API 为其提供类的核心功能包括:

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

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

  • index:列表值按整数编制索引,映射值按其他对象编制索引。

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


答案 2

该包包含用于组织任何类型的数据的数据结构。它基本上处理抽象的数据结构(如,,),这些结构是通过其方法和行为定义的(例如,一个集合不包含两次元素,一个列表维护顺序并允许重复等)。java.utilListSetMap

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

如果你认为树是一种特殊的Graph(确实如此),那么你对适用于图形的特定属性感兴趣,而不是一般的集合(本质上是列表,反过来又用于实现像图形这样的东西)。

正如本主题中提到的,如果您对图形建模感兴趣,那么图形库有很多选择。就个人而言,我可以推荐JGraphT

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