2010-06-05 9 views
7

Attualmente sto imparando l'API di Java Collections e sento di avere una buona conoscenza delle basi, ma non ho mai capito perché questa API standard non include un'implementazione Graph. Le tre classi base sono facilmente comprensibili (Elenco, Set e Mappa) e tutte le loro implementazioni nell'API sono per lo più semplici e coerenti.Perché l'API delle raccolte Java non include un'implementazione del grafico?

Considerando la frequenza con cui i grafici si presentano come un modo potenziale per modellare un determinato problema, questo non ha senso per me (è possibile che esista nell'API e non sto cercando nel posto giusto, naturalmente). Steve Yegge suggerisce in uno dei suoi post sul blog che un programmatore dovrebbe considerare i grafici prima di attaccare un problema, e se il dominio del problema non si adatta naturalmente a questa struttura di dati, solo allora si considerano le strutture alternative.

La mia prima ipotesi è che non esiste un modo universale per rappresentare i grafici o che le loro interfacce potrebbero non essere abbastanza generiche da rendere utile l'implementazione dell'API? Ma se si riduce a un grafico i suoi componenti di base (vertici e un insieme di bordi che collegano alcuni o tutti i vertici) e si considerano i modi in cui i grafici sono comunemente costruiti (metodi come addVertex (v) e insertEdge (v1, v2)) sembra che una generica implementazione del grafico sarebbe possibile e utile.

Grazie per avermi aiutato a capire meglio.

+1

L'API Java è piena di buchi. Non c'è bisogno di essere un motivo per loro. – skaffman

+1

L'API Java SE fornisce solo un'API * basic * da sviluppare ulteriormente. Ecco perché esistono API "di terze parti" più specifiche/convenienti che puoi semplicemente utilizzare sopra l'API di Java SE. – BalusC

risposta

12

Si noti che alcuni grafici speciali sono inclusi nel quadro di raccolta, in particolare elenchi e alberi collegati.

Ciò indica anche una possibile ragione per cui non è presente alcuna implementazione generale del grafico: poiché i grafici possono avere così tante forme e aromi diversi con caratteristiche molto diverse, un grafico generale potrebbe non rivelarsi molto utile.

Inoltre, almeno nella mia pratica finora, non ho sentito la necessità di grafici la maggior parte del tempo. Alcuni domini ne hanno sicuramente bisogno, ma molti semplicemente no. (Su più di una dozzina di progetti in vari domini sono stato coinvolto fino ad ora, ne racconto due che avevano effettivamente bisogno di grafici.) Quindi immagino che non ci sia stata davvero una grande pressione dalla comunità Java in generale per avere un grafico nella collezione Struttura. Contiene solo le cose di base, che è necessario "quasi sempre", da "quasi tutti". E uno dei suoi punti di forza è in effetti la sua (relativa) semplicità e chiarezza, che, credo, i suoi progettisti considerano un bene da preservare.

+1

+1. I grafici forniscono un modo per ragionare in comune su molti algoritmi specifici, strutture di dati, ecc. Quando si tratta specificamente di scrivere codice, raramente si desidera una classe "Graph" in quanto tale, ma piuttosto un grafico con proprietà molto specifiche. –

Problemi correlati