首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Java集合框架不包含树和图

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

Stack Overflow用户
提问于 2011-02-12 22:10:48
回答 5查看 34.1K关注 0票数 54

我熟悉Java Collection Framework,它包含了基本的接口:CollectionMap。我想知道为什么框架不包含像Tree和Graph这样的基本集合结构。两者都可以看作是Collection的子类型。

顺便说一下,我知道TreeSet是由红黑树底层实现的。但是,TreeSet不是树而是Set,所以框架中没有真正的树。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-12 22:35:44

我想知道为什么框架不包含像树和图这样的基本集合的结构。两者都可以看作是Collection__的子类型。

这是一个好问题。我认为这可以简单地归结为作用域。Collections API为其提供类的核心功能是:

  • iteration order List :列表和排序映射具有指定的迭代顺序,大多数sets don't.
  • duplicates:List允许重复,sets do not
  • index:列表值按整数索引,映射值按其他对象索引。

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

票数 30
EN

Stack Overflow用户

发布于 2011-02-13 00:33:40

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

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

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

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

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

票数 14
EN

Stack Overflow用户

发布于 2011-02-12 22:51:04

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

  • 一般的树或图形接口将是“功能差的”。
  • 使用字段来表示子指针和父指针(如果需要)来实现树或图形会更容易、更有效。

请注意,Apache commons和Google commons都不支持通用图形或树。然而,我确实遇到了几个通用的树/图层次结构:

framework.

  • The
  • JavaNet上的and复合项目包含"com.truchsess.util"图形和树,SourceForge上的and OpenJGraph项目(非活动)包括树库和图形库。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4978487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档