【发布时间】:2011-06-27 02:04:40
【问题描述】:
我正在尝试使用优秀的 JGraphT 库在 Java 中编写拼字游戏程序,作为有向无环图和 Java 的练习。
所以,我的边将是字母,顶点位设置字母的大小。本质上,您逐个字母地遍历图形并检查您所在的位集,以查看如果附加到您从根节点遵循的字母弧中,哪些字母构成了一个单词。
我明白了,但让我担心的是来自 JGraphT Javadoc:
此方法使用此图的 EdgeFactory 创建新边 e。对于要添加的新边,e 不能等于图形中的任何其他边(即使图形允许边多重性)。更正式地说,该图不得包含任何边 e2 使得 e2.equals(e)。如果找到这样的 e2 则放弃新创建的边 e,该方法保持此图不变返回 null。
我的边和节点永远不会是唯一的,除非引用不匹配。所以,我的问题是 Java 程序员会在这里做什么?
创建一个 Letter 类和一个 BitSet 类并将 equals() 保留为默认值,这将始终为 false,因为引用不匹配?但是,那么我该如何处理所有其他依赖 .equals() 正确的方法,例如 .contains()?
-
创建 Edge 和 Node 类作为真正的 Letter 和 BitSet 类的薄包装器,并将始终为 false 的 .equals() 放在 Edge;Node 中,将真实的放在 Letter;Bitset 中?
public class Edge { private Letter letter; //getter and setter coming public boolean equals (Object b) { return false; } } - 还有别的吗?
【问题讨论】:
-
你实际上可以为这两个类合理地实现equals。但是,由于您唯一需要的是确保每个对象都只等于它自己而不是任何其他对象,因此默认的 equals 实现将做到这一点。所以不要覆盖它