我有一个名为 Edge 的类,它具有属性源 id、目标 id 和权重。我想将此边存储在集合数据结构中,因此在集合中不会有重复的边(即:具有相同源和目标 id 的边)。
问题是这样的: 我想向这个数据结构添加一个边缘。如果数据结构中已经存在一条边,我不需要再次添加它,我只需要将现有边的权重与我尝试添加的边相加。
我很确定我必须重写集合的添加函数。有人可以给我指点吗?在 Java 中为此使用的最佳数据结构是什么?
最佳答案
一些建议。
您想要的底层数据结构可能是一个映射(HashMap 可能是最好的具体实现),而不是一个集合。键应该是(源,目标)对,值可以是您的 Edge 对象。如果您非常担心重复,有一些方法可以解决这个问题,其中之一是实际上仅将权重存储为值。
其次,这是调用 Graph 类。如果接口(interface)设计得好,它会隐藏内部实现细节。我强烈建议使用组合而不是继承。换句话说,你的图有一个 map ,而不是一个 map 。
另请查看现有代码,例如 JGraphT ,它已经有一个加权有向图,与您上面描述的一样。有时最好不要从头开始重新发明事物。
祝你好运。
关于java - 在数据结构中存储边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5683808/