我处在一个需要在图形结构中建模一组JavaBeans的位置,其中每个bean都是图形上的节点/顶点,它们通过边缘“相互连接”/相互关联。
因此,就像使用List<?>
或ArrayList<?>
来表示项目序列一样,我需要一个(最好是通用的)API来表示图形中的节点。这个API需要允许我构建图形,添加/删除图形中的节点,但我喜欢等等。
此外,我需要能够通过传递任意数据值来搜索整个图形,并且它将返回包含该数据的节点/顶点。
我唯一能找到的是内置Java TreeSet
,但我不需要从单个根节点流出的有向树。我需要一个真实的(在数学意义上)图形API。
这样的解决方案是否存在或者我从头开始编写自己的解决方案(uggghhh)。提前谢谢!
答案 0 :(得分:0)
如果我理解得很清楚,你需要表示一个节点&#34;对象:
1)允许您存储值,以便稍后搜索正确的节点
2)使用预定义的数据结构来保存图表的信息。
3)允许搜索算法使用。
有一个简单的解决方案可以满足所有这三个要求:
public class Node {
// Add as many fields as you need to contain the node info
private String mName;
private int mArbitraryValue;
// Store the adjacent nodes in a list
private List<Node> mAdjacencyList;
//Define your constructors
public Node(String name, int arbitraryValue, List<Node> adjacencyList) {
mName = name;
mArbitraryValue = arbitraryValue;
mAdjacencyList = adjacencyList;
}
/* Add your methods here depending on the functionality that
you want to implement
*/
public String getName() {
return mName;
}
public int getArbitraryValue() {
return mArbitraryValue;
}
public List<Node> getNeighbors() {
return Collections.unmodifiableList(mAdjacencyList);
}
// Add setters if you want these values to be able to change
public boolean addNeighbor(Node n) {
return !mAdjacencyList.contains((Node) n) && mAdjacencyList.add(n);
}
public boolean removeNeighbor(Node n) {
return mAdjacencyList.remove((Node) n);
}
}
如果您的对象可以更改,我建议您不要使用HashMap实现邻接列表,因为它可能导致集合中断(即,即使对象存在,对contains()的调用也会返回false )。
现在,您的搜索算法可以访问节点的成员变量以检查它们是否已完成。