我试图覆盖顶点变量等于。当前,当调用vertexList.contains("test")时,不会运行顶点类中声明的equals()。我是不是漏掉了什么?
完整的代码可以在我的git中心找到,如果你认为它是其他的东西,以及一个快速的测试文件UI.java。否则我就没主意了。
谢谢你,
class Data implements Graph
{
java.util.LinkedList<vertex> vertexList = new java.util.LinkedList<vertex>();
class vertex
{
String ID;
java.util.LinkedList<String> links = new java.util.LinkedList<String>();
boolean tracker = false;
public vertex(String it)
{
ID = it;
}
@Override
public boolean equals(Object obj)
{
if (obj.equals(null))
return false;
System.err.println("OBJECT CHECK");
String str = (String) obj;
// return true; //To test if it's being accessed
return str.equals(ID);
}
public String toString()
{
return ID;
}
}
}
执行vertexList.contains("test")
将对对象执行String
的equals()
方法。您正在寻找linkedList.contains(new Vertex("a"));
,它将针对目标对象执行您的 equals()
方法。下面是contains()
的链表impl,其中o
是正在搜索的对象。
for (Entry e = header.next; e != header; e = e.next) {
if (o.equals(e.element))
return index;
index++;
}
您还应该在equals()
方法中检查Vertex
而不是String
。这就是它的意义所在。您应该尝试检查一个Vertex
是否等于另一个。
您想在这一行中完成什么?
String str = (String) obj;
如果我正确理解了你的代码的目的,我认为你的equals方法应该看起来更像这样:
@Override
public boolean equals(Object obj){
if( obj != null && obj.getClass().equals(this.getClass()){
return ((vertex)obj).toString().equals(this.ID)
} else {
return false;
}
}