0

我正在尝试覆盖顶点变量等于。当前,当调用 vertexList.contains("test") 时,不会运行在顶点类中声明的 equals()。有什么我想念的吗?

如果你认为它是别的东西,可以在我的git hub上找到完整的代码,以及一个快速测试文件 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;
        }
    }
}
4

2 回答 2

1

执行vertexList.contains("test")将针对您的对象执行equals()方法。String您正在寻找linkedList.contains(new Vertex("a"));哪个将对目标对象执行您的方法。 这是正在搜索的对象在哪里equals()的linkedlist impl 。contains()o

        for (Entry e = header.next; e != header; e = e.next) {
            if (o.equals(e.element))
                return index;
            index++;
        }

您还应该在方法中检查 aVertex而不是 a 。这就是它的目的。您应该尝试检查一个是否等于另一个。Stringequals()Vertex

于 2013-04-15T18:22:25.497 回答
0

你想在这条线上完成什么?

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;
  }
} 
于 2013-04-15T18:33:30.353 回答