如何实现可视性受限的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元素) 节点类将没有其他用途,因此如何限制可见性,以便只有图形具有访问权限 编辑:此外,如何衡量节点之间的连接?我想我需要一个与上面提到的完全不同的实现,因为一个

我目前正在学习数据结构(例如LinkedList、DoublyLinkedList、ArrayList等等),我想知道如何在Java中实现(非定向)图

我在考虑两个类:
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值;
}
私有阶级边缘{
私用节点到;
来自的私有节点;
私人号码成本;
}
}