2010-06-05 81 views
7

我正在學習Java集合API和感覺我有基礎知識有很好的理解,但我從來沒有明白爲什麼這個標準API不包括圖實現。這三個基類很容易理解(列表,設置和映射),並且它們在API中的所有實現都是直接且一致的。爲什麼Java Collections API不包含Graph實現?

考慮到圖表出現的頻率作爲模擬給定問題的潛在方式,這對我來說沒有任何意義(它可能存在於API中,並且我不是在正確的位置)。 Steve Yegge在他的一篇博客文章中建議,程序員在攻擊問題時應首先考慮圖形,如果問題域不適合自然地適合該數據結構,那麼只能考慮替代結構。

我的第一個猜測是,有代表圖沒有統一的辦法,或者說它們的接口可能不足以爲通用的API實現有用?但是,如果你帶下來的圖形它的基本組件(頂點和一組連接的部分或全部頂點的邊緣),並考慮圖表通常構造(如addVertex(V)和insertEdge方法途徑(V1,V2) )似乎一個普通的圖形實現將是可能的和有用的。

感謝您幫助我更好地理解這種。

+1

Java API充滿了漏洞。這不需要成爲他們的理由。 – skaffman 2010-06-05 22:47:12

+1

Java SE API僅提供* basic * API以進一步構建。這就是爲什麼存在許多更具體/方便的「第三方」API,您可以在Java SE API上使用它。 – BalusC 2010-06-05 22:49:45

回答

12

請注意,Collection Framework中包含一些特殊的圖表,特別是鏈表和樹。

這也指出了一個可能的原因,沒有一般的圖形執行存在:如圖表可以有這麼多種不同的形式和味道與完全不同的特性,一般的圖形可能不會變成是非常有用的。

而且,至少在我的實踐中,到目前爲止,我還沒有感到圖表大部分時間的需要。有些領域肯定需要它們,但很多根本不需要。 (到目前爲止,我參與過的各個領域的十多個項目中,我重新計算了實際需要圖的兩個項目)。所以我想,Java社區通常沒有真正的巨大壓力,框架。它只包含基本的東西,「幾乎所有人」都需要「幾乎總是」。它的優點之一就是它的(相對)簡潔和清晰,我相信它的設計師將其看作是一種可以保存的資產。

+1

+1。圖形提供了一種在許多特定算法,數據結構等中共同推理的方法。當它專門用於編寫代碼時,實際上很少需要一個「Graph」類,而是一個具有非常特定屬性的Graph。 – 2010-06-06 02:09:43

相關問題