我正在链表中创建一个equals方法,该方法将采用相同类型的链表参数。我的linkedList具有2个属性:CellNode
,和往常一样,还有一个head
属性。在我的CellNode中,内部有一个CellPhone
对象。我遇到的问题是,此equals方法在调用CellPhone
类的“更小的” equals方法时始终返回false。
我尝试创建1个链表,然后从克隆方法创建1个链表,但这也不起作用。而且我发现CellPhone
的equals方法不会导致任何问题。我试图将2个CellPhone相互比较,它可以按预期工作,但是显示带有链接列表的意外结果
这是CellPhone类中的“较小” equals方法
public boolean equals(Object obj) {
if((obj == null) || (obj.getClass() != getClass())) {
return false;
} else {
CellPhone cellObj = (CellPhone)obj;
System.out.println(cellObj + " comparing with " + this) ;
if ((this.getBrand() == cellObj.getBrand()) &&
(this.getPrice() == cellObj.getPrice()) &&
(this.getYear() == cellObj.getYear()))
{
System.out.println("equal");
return true;
} else {
System.out.println("not equal from CellPhone object");
return false;
}
}
}
这是我在链接列表中的equals方法:
public boolean equals(CellList passed) {
CellList other = new CellList(passed);
if(other.size() != passed.size()) {
return false;
}
CellNode index = head;
CellNode otherIndex = other.head;
while(index != null) {
if(index.cell.equals(otherIndex.cell) == false) {
System.out.println("Not equal from linkedList");
return false;
}
index = index.next;
otherIndex = otherIndex.next;
}
return true;
}
我正在内部驱动程序中对此进行测试:
//testing
CellList Alist = new CellList();
CellList fake = new CellList();
CellPhone c1 = new CellPhone(1119000, "SonyEricsson", 2009, 347);
CellPhone c2 = new CellPhone(1116700, "Nokia", 2011, 500);
Alist.addToStart(c1);
Alist.addToStart(c2);
//adding element for the fake list
fake.addToStart(c1);
fake.addToStart(c2);
//Comparing
System.out.println(Alist.equals(fake));
我希望结果会是正确的,因为我添加了相同的2个CellPhone对象,但实际上它是这样输出的:
[1116700: Nokia 500.0$ 2011] comparing with [1116700: Nokia 500.0$ 2011]
not equal from CellPhone object
Not equal from linkedList
false
因此,尽管所有属性都相同,但它会从CellPhone类中提示not equal
行。
我在这里想念什么?谢谢