java - 在数据结构中存储边

标签 java data-structures

我有一个名为 Edge 的类,它具有属性源 id、目标 id 和权重。我想将此边存储在集合数据结构中,因此在集合中不会有重复的边(即:具有相同源和目标 id 的边)。

问题是这样的: 我想向这个数据结构添加一个边缘。如果数据结构中已经存在一条边,我不需要再次添加它,我只需要将现有边的权重与我尝试添加的边相加。

我很确定我必须重写集合的添加函数。有人可以给我指点吗?在 Java 中为此使用的最佳数据结构是什么?

最佳答案

一些建议。

您想要的底层数据结构可能是一个映射(HashMap 可能是最好的具体实现),而不是一个集合。键应该是(源,目标)对,值可以是您的 Edge 对象。如果您非常担心重复,有一些方法可以解决这个问题,其中之一是实际上仅将权重存储为值。

其次,这是调用 Graph 类。如果接口(interface)设计得好,它会隐藏内部实现细节。我强烈建议使用组合而不是继承。换句话说,你的图有一个 map ,而不是一个 map 。

另请查看现有代码,例如 JGraphT ,它已经有一个加权有向图,与您上面描述的一样。有时最好不要从头开始重新发明事物。

祝你好运。

关于java - 在数据结构中存储边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5683808/

相关文章:

java - Android Studio 使用官方代码 fragment 获取广告 ID

java - Redis 仍然返回 null 条目,即使它们已过期

arrays - 以下方法的运行时间如何为 O(N) 且空间复杂度为 O(1)?

data-structures - 如何为 Bitvector 实现自定义切片

c++ - 无法为 std::less/std::greater 实例化 binary_function

python - 访问二维列表的元素

java - 如何突出显示 TextView 中包含的部分文本?

java - Dagger Hilt 测试错误 - 错误 : cannot find symbol @ScopeMetadata, @QualifierMetadata

java - JDBI3动态创建WHERE子句

java - Java中Hypergraph上实现节点的JSON结构