自定义类中的Java override equals()



我试图覆盖顶点变量等于。当前,当调用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")将对对象执行Stringequals()方法。您正在寻找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;
  }
} 

最新更新