【发布时间】:2020-10-30 04:21:52
【问题描述】:
来自 Java 新手的请求。我知道这是一个幼稚的问题,但直到现在我还没有找到令人满意的解决方案。目前stackoverflow上的一些帖子要么是针对未加权的图,要么涉及复杂的图实现工作。
我有一组顶点,用整数 1、2、3、...标记,其中一些与无向加权边相连(权重也是整数)。我已经设法通过使用 HashSet 来存储这些顶点,这对我来说非常方便(添加、搜索、删除等)
但是,我很难使用 Java 中的内置数据结构来存储这些边。 一般来说,我只想要一个简单的内置数据结构来存储带有权重的边,这样我就可以快速搜索和选择链接到某个顶点的边。我有一些初步的幼稚想法。例如 ArrayList
单纯使用Java内置的数据结构,这样的需求是否可行?如果是,你能告诉我该怎么做吗?如果没有,你能想出一个对上述工作很容易的图形实现吗?提前谢谢你。
【问题讨论】:
-
我认为更好的方法是在使用类时表示图形及其组件。例如定义一个
Node类,它有两个属性:一个名称(字符串)和一个边列表。定义一个具有 2 个属性的Edge类:Node和到它的距离 (int)。Graph将是Nodes 的集合。查看示例here -
@c0der 谢谢!但是,对于顶点标签,我只想使用整数(为方便起见,因为 mu 输入是整数)。当我在 Vertex 类中将所有 String 更改为 int 或 Integer 并想要创建像 Vertex v1 = new Vertex(1); 这样的顶点时,结果是 java.lang.NoSuchMethodError: Vertex.
(I)V 或 java.lang.NoSuchMethodError: Vertex. (Ljava/lang/Integer;)V。如何解决这个问题? -
张贴minimal reproducible example 的代码。一个新帖子会更好,因为这是一个不同的问题。
-
@c0der 我所做的基本上是在你的代码类Vertex中,转私有String标签;私有 int 标签;将 public Vertex(String pageObject) 变为 public Vertex(int pageObject),将 String getLabel() 变为 int getLabel(),其他语句保持不变。然后当我尝试使用 Vertex v1 = new Vertex(1); 创建一个顶点时在主函数中,我遇到了上面提到的错误。我认为启动一个新线程是不合适的,因为如果没有示例代码的上下文很难描述问题。
-
请不要描述您的代码。发表它。 repl.it/@c0derrepo/LoneKeyTruetype#Main.java
标签: java graph hashmap undirected-graph weighted-graph