2011-10-30 17 views
1

私はJavaでグラフを実装するタスクを与えられました。それは最終的に検索方法をテストするために使用されます(幅の広いものから深いものまで、繰り返し深いものから)。 mainメソッドは、グラフクラスであろうJavaでグラフを実装する

public interface Node { 
    public Node createNode(String name, int ID, float weight); 
    public Node[] getNeighbours(); 
    public Edge[] getEdges(); 
    public void addEdge(Edge e); 
    public void removeEdge(Edge e); 
    public String getName(); 
    public int getID(); 
    public float getWeight(); 
    public String toString(); 

public interface Edge { 
    public Edge createEdge(String name, int ID, float weight); 
    public Node getStartNode(); 
    public void setStartNode(Node n); 
    public Node getEndNode(); 
    public void setEndNode(Node n); 
    public String getName(); 
    public int getID(); 
    public float getWeight(); 
    public String toString(); 

public interface Graph { 
    public Graph createGraph(String name, int ID, Node[] nodes, Edge[] edges, Node root); 
    public String getName(); 
    public Edge[] getEdges(); 
    public void addEdge(Edge e); 
    public Edge getEdge(String name, int ID); 
    public void removeEdge(Edge e); 
    public Node[] getNodes(); 
    public void addNode(Node n); 
    public Node getNode(String name, int ID); 
    public void removeNode(Node n); 
    public void setRoot(Node n); 
    public Node getRoot(); 
    public boolean isTree();  <= optional! 
    public String toString(); 

:なされるべき3つのクラスが3つの対応するインタフェースを実装しなければなりません。

私は、コンストラクタではなく各クラスのメソッドを作成する理由について少し混乱しています。

また、隣接行列や隣接リストを使用してエッジを保存する必要があるかどうかについてアドバイスできますか?

すべてのご協力をよろしくお願いいたします。

ありがとう

+0

ここに近い投票があります。おそらく、あなたの疑問を「Javaインターフェイスの奇妙なコンストラクタのようなメソッド」に変更すると、それがより魅力的になるかもしれません。ちょっとした考え。 –

答えて

2

私は、インターフェイスに作成メソッドを配置することの賢明さに疑問を呈しています。インタフェースのメソッドは、それらが、コンストラクタの代わりに使用されている場合、通常のインスタンスメソッドの実装クラスで、このような方法としてを実装する必要がで表示することはできませんクラス方法、すなわちstaticファクトリメソッド、ありますインターフェイス。

Javaインターフェイスで作成メソッドを使用する唯一の理由は、クローン作成を行っている場合です(ここではそうは見えません)。これらのインタフェースを実装するとき、作成メソッドはあなたのコンストラクタを呼び出します(任意の方法で自由に実装できます)。しかし、これらのメソッドはインスタンスメソッドとして呼び出す既存のオブジェクトを持つ必要があるため、 。

2番目の質問では、隣接行列、隣接リスト、または発生率リストの選択は完全にあなた次第です。

1

インターフェイスでコンストラクタを定義することはできません。詳細は、this wiki pageを参照してください。

正しい方向に導く簡単な説明については、wikipedia page on adjacency list tradeoffsを参照してください。

+0

+1良いポインタ –