大哥,你这个当然是false了。你构造器里面new了3个对象,内存地址分别为1,2,3,后面你主方法里面调用contains方法时,传值2和3又是new的对象,此事它的内存地址是4了。所以,虽然它和nodes里面的某一个元素值一样,但实际它们指向的是不同的物理地址。你加一个就new一个,这里的代码你改一下,不要边加边new,new一个Node对象,加多个元素。
因为contains比较是用的equals方法进行判断,你Node类equals方法没有重写的话,比较的是对象的内存地址,会返回false,因此contains返回false。如果要想contains返回true,需要修改Node类equals方法,只比较Node的x和y相等即判定Node相等,则contains返回true
Node 类是哪里来的?有没有重写 equals 方法??
LinkedList 中的方法为:
public int indexOf(Object o) {
int index = 0;
if (o==null) {
for (Entry e = header.next; e != header; e = e.next) {
if (e.element==null)
return index;
index++;
}
} else {
for (Entry e = header.next; e != header; e = e.next) {
if (o.equals(e.element))
return index;
index++;
}
}
return -1;
}
会调用 对象的 equal 方法。