我想创建一个程序来生成图表(具体来说是程序图表),该图表在节点上存储值,并存储每个单独节点连接到的其他节点。
我考虑使用链表来实现,这是正确的方法吗?如有其他建议,请不吝赐教。
我考虑使用链表来实现,这是正确的方法吗?如有其他建议,请不吝赐教。
一般来说,使用邻接表对图进行建模是一个很好的主意。可能有现成的框架可以实现这一点,但如果你对表示方法感兴趣,通常需要两个要素。首先,一个包含所有节点的HashMap,节点标签可以作为键,节点本身作为值。
Java API文档中描述了HashMaps 在此。
在每个节点对象中,您需要一个列表,其中包含与该节点相邻的节点。最好使用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。 实际上,在Java SE中已经有了一个很好的swing包内置的实现,即javax.swing.tree.DefaultMutableTreeNode。 它可以在Swing应用程序之外使用,并提供非常标准的TreeNode模型。
你会发现每个方法都能满足你的需求:getChildren()、getParent()、setUserObject()等等,以及用于遍历和搜索节点树的递归方法。
好消息是,你将能够在几分钟内编写一个JTree UI!