2012-04-07 59 views
0

我处于需要在图形结构中对一组JavaBean建模的位置,其中每个bean都是图形上的节点/顶点,并且它们“连接”/相关彼此通过和边缘。因此,就像使用List<?>ArrayList<?>来表示项目序列一样,我需要一个(最好是通用的)API来表示图形中的节点。这个API需要允许我构建图形,但是我喜欢图形中添加/删除节点等。Java图形和图形搜索API

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

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

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

+0

对此没有太多的了解。 'class Node {private List neighbors; }'。 – 2012-04-07 01:08:57

+0

[图/网络数据结构的Java API列表]的可能重复(http://stackoverflow.com/questions/2152143/list-of-java-apis-for-graph-network-data-structures) – 2012-04-07 01:11:47

回答

0

如果我理解得很好,你需要一个“节点”对象的表示:

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邻接表,如果你的对象是可以改变的,因为它可以导致设为break(即,即使对象存在,对contains()的调用也可以返回false)。

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