如何实现可视性受限的Java图形数据结构和类?
我目前正在学习数据结构(例如LinkedList、DoublyLinkedList、ArrayList等等),我想知道如何在Java中实现(非定向)图 我在考虑两个类:如何实现可视性受限的Java图形数据结构和类?,java,data-structures,graph,visibility,class-visibility,Java,Data Structures,Graph,Visibility,Class Visibility,我目前正在学习数据结构(例如LinkedList、DoublyLinkedList、ArrayList等等),我想知道如何在Java中实现(非定向)图 我在考虑两个类:Graph和Node 每个节点都应该知道它连接到了哪些其他节点(一个列表是否合适?什么样的列表最好?) 然后,Graph类可以提供类似boolean contains(T元素) 节点类将没有其他用途,因此如何限制可见性,以便只有图形具有访问权限 编辑:此外,如何衡量节点之间的连接?我想我需要一个与上面提到的完全不同的实现,因为一个
Graph
和Node
每个节点都应该知道它连接到了哪些其他节点(一个
列表是否合适?什么样的列表最好?)
然后,Graph
类可以提供类似boolean contains(T元素)
节点
类将没有其他用途,因此如何限制可见性,以便只有图形
具有访问权限
编辑:此外,如何衡量节点之间的连接?我想我需要一个与上面提到的完全不同的实现,因为一个简单的连接节点列表是不够的?您可以将节点设置为私有内部类,如下所示:
public class Graph<T> {
/* code */
private class Node<T> {
/* code */
}
}
公共类图{
/*代码*/
私有类节点{
/*代码*/
}
}
对于链接权重:与其将相邻节点保存为列表,不如将其保存为将每个节点映射到特定权重的HashMap
注意:这个实现实际上是一个有向图。我建议您学习名为JGraphT的第三方包,并研究它如何构建具有不同属性的图
图是由一组顶点组成的有序对G=(V,E)
或节点或点以及一组边、弧或线,
哪些是2元素子集
下面的定义应该给你一个清晰的方式来组织你的图表。它包括Set
和Set
(实现肯定是HashSet
)Edge
是一对from
和to
节点
s<代码>边
可以具有加权图的属性成本
。如果需要无向图,可以存储指示一条无向边的两条有向边
s,或者将属性无向
添加到边
类中
public class Graph<T> {
private Set<Node<T>> nodes;
private Set<Edge<T>> edges;
private class Node<T> {
private T value;
}
private class Edge<T> {
private Node<T> to;
private Node<T> from;
private Number cost;
}
}
公共类图{
私有集节点;
私有集边;
私有类节点{
私人T值;
}
私有阶级边缘{
私用节点到;
来自的私有节点;
私人号码成本;
}
}