Java图形和图形搜索API
我需要在图结构中对一组JavaBean建模,其中每个bean都是图上的一个节点/顶点,它们通过和边彼此“连接”/“相关” 因此,就像使用Java图形和图形搜索API,java,collections,graph,Java,Collections,Graph,我需要在图结构中对一组JavaBean建模,其中每个bean都是图上的一个节点/顶点,它们通过和边彼此“连接”/“相关” 因此,就像使用列表或数组列表来表示项目序列一样,我需要一个(最好是通用的)API来表示图中的节点。这个API需要允许我构建图,以我喜欢的方式从图中添加/删除节点,等等 另外,我需要能够通过传递任意数据值来搜索整个图,它将返回包含该数据的节点/顶点 我唯一能找到的就是内置的JavaTreeSet,但我不需要从单个根节点流出来的定向树。我需要一个真正的(数学意义上的)图形API
列表
或数组列表
来表示项目序列一样,我需要一个(最好是通用的)API来表示图中的节点。这个API需要允许我构建图,以我喜欢的方式从图中添加/删除节点,等等
另外,我需要能够通过传递任意数据值来搜索整个图,它将返回包含该数据的节点/顶点
我唯一能找到的就是内置的JavaTreeSet
,但我不需要从单个根节点流出来的定向树。我需要一个真正的(数学意义上的)图形API
这样的解决方案存在吗?还是我一直在白手起家地写自己的(uggghhh)。提前谢谢 如果我理解得很好,您需要一个“节点”对象的表示: 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);
}
}
公共类节点{
//添加包含节点信息所需的尽可能多的字段
私有字符串mName;
私有int-mArbitraryValue;
//将相邻节点存储在列表中
私人名单;
//定义构造函数
公共节点(字符串名称、int-arbitraryValue、列表邻接列表){
mName=名称;
mArbitraryValue=任意值;
MadjacyList=邻接列表;
}
/*根据所使用的功能在此处添加方法
你想实现吗
*/
公共字符串getName(){
返回mName;
}
public int getArbitraryValue(){
返回mArbitraryValue;
}
公共列表getneights(){
返回集合。不可修改列表(MadjacyList);
}
//如果希望这些值能够更改,请添加setter
公共布尔addNeighbor(节点n){
return!madjacyList.contains((节点)n)&&madjacyList.add(n);
}
公共布尔removeNeighbor(节点n){
返回madjacyList.remove((节点)n);
}
}
如果可以更改对象,我不建议您使用HashMap实现邻接列表,因为它可能会导致集合中断(即调用contains()可以返回false,即使对象存在)
现在,您的搜索算法可以访问节点的成员变量,以检查它们是否已完成。这并不是很多<代码>类节点{private List neights;}。的可能重复项