ノードに値を保存し、個々のノードが接続されている他のノードも保存するグラフ(具体的にはプログラムグラフ)を作成するプログラムを作成したいと思います。
リンクリストを使用してこれを行うことを考えています。これは正しい方法ですか?他のアドバイスをいただければ幸いです。
ノードに値を保存し、個々のノードが接続されている他のノードも保存するグラフ(具体的にはプログラムグラフ)を作成するプログラムを作成したいと思います。
リンクリストを使用してこれを行うことを考えています。これは正しい方法ですか?他のアドバイスをいただければ幸いです。
ほとんどの場合、隣接リストを使用してグラフをモデル化することをお勧めします。これを行うための既存のフレームワークが存在する可能性がありますが、演習として表現に関心がある場合は、通常 2 つのことが必要です。まず、すべてのノードを含む HashMap です。ノードのノード ラベルをキーにすることができ、ノード自体が値になります。
Java API は HashMap をここに文書化しています。
各ノード オブジェクトには、そのノードに隣接するノードのリストが必要です。これは、ここに記載されている ArrayList を使用して行うのが最適です。
これがどのように整理されるかです。
import java.util.Hashmap;
import java.util.ArrayList;
class Node {
String label;
ArrayList<Node> adjacencyList;
}
HashMap<String, Node> graph = new HashMap<String, Node>();
グラフで実行したいほとんどのアルゴリズムは、この表現で適切に実行されます。
あなたが探しているのはTreeNode APIのようです。実際には、swing パッケージ内に Java SE に既に存在するすばらしいものがあり、デフォルトの実装はjavax.swing.tree.DefaultMutableTreeNodeです。これは Swing アプリケーションの外部で使用でき、非常に標準的な TreeNode モデルを提供します。
getChildren ()、getParent ()、setUserObject () など、必要に応じてあらゆるものが見つかります。また、ノード ツリーをクロールして検索するためのすべての再帰メソッドも見つかります。
幸いなことに、数分で JTree UI を作成できるようになります。
独自のグラフ オブジェクトを作成するか、Jungなどを使用できます。