为什么Java Collections API不包含Graph实现?

dva*_*ria 8 java api collections graph

我目前正在学习Java Collections API并且觉得我对基础知识有很好的理解,但我从未理解为什么这个标准API不包含Graph实现.这三个基类很容易理解(List,Set和Map),并且它们在API中的所有实现都非常简单和一致.

考虑到图形作为模拟给定问题的潜在方式的频率,这对我来说没有意义(它可能存在于API中,我当然没有找到正确的位置).Steve Yegge在他的一篇博客文章中建议程序员在攻击问题时应首先考虑图形,如果问题域不能自然地适应这种数据结构,那么只考虑替代结构.

我的第一个猜测是,没有通用的方法来表示图形,或者它们的接口可能不够通用,以使API实现有用吗?但是如果你将图形去掉它的基本组件(顶点和连接一些或所有顶点的一组边),并考虑通常构造图形的方式(addVertex(v)和insertEdge(v1,v2)等方法) )似乎通用的Graph实现是可行和有用的.

感谢您帮助我更好地理解这一点.

Pét*_*rök 13

请注意,Collection Framework中包含一些特殊的图形,特别是链接列表和树.

这也指出了为什么不存在一般的Graph实现的可能原因:由于图形可以具有许多不同的形式和具有完全不同特征的风格,因此通用Graph可能不会非常有用.

此外,至少在我的实践中,到目前为止,我并不觉得大多数时候都需要图表.一些领域肯定需要它们,但许多领域根本不需要它们.(到目前为止我参与的各个领域中的十多个项目中,我重新计算了两个实际需要图表的项目.)所以我想Java社区一般都没有给集合中的图表带来巨大压力框架.它只包含"几乎每个人都需要"的基本内容.其中一个优点确实是它的(相对)简洁性和清晰度,我相信,它的设计者认为它是一种可以保留的资产.