Java图形和图形搜索API

时间:2012-04-07 01:06:52

标签: java collections graph

我处在一个需要在图形结构中建模一组JavaBeans的位置,其中每个bean都是图形上的节点/顶点,它们通过边缘“相互连接”/相互关联。

因此,就像使用List<?>ArrayList<?>来表示项目序列一样,我需要一个(最好是通用的)API来表示图形中的节点。这个API需要允许我构建图形,添加/删除图形中的节点,但我喜欢等等。

此外,我需要能够通过传递任意数据值来搜索整个图形,并且它将返回包含该数据的节点/顶点。

我唯一能找到的是内置Java TreeSet,但我不需要从单个根节点流出的有向树。我需要一个真实的(在数学意义上)图形API。

这样的解决方案是否存在或者我从头开始编写自己的解决方案(uggghhh)。提前谢谢!

1 个答案:

答案 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 )。

现在,您的搜索算法可以访问节点的成员变量以检查它们是否已完成。