删除存储对象的链表中的节点
Deleting a node in a linked list storing an object
这是我的 linkedList class 中删除方法的代码。此方法在与整数和字符串一起使用时工作得很好,但在我将对象作为参数传递时不起作用。仅供参考:在 ListNode 中,我将其值存储为一个对象,即 getValue() 方法 returns 一个对象。
public void delete(Object pObject)
{
DSAListNode currentNode=head;
if(head.equals(pObject))
{
removeFirst();
}
else if(tail.equals(pObject))
{
removeLast();
}
else
{
while(currentNode!=null)
{
DSAListNode previousNode=currentNode.getPrevious();
DSAListNode nextNode=currentNode.getNext();
if(currentNode.getValue().equals(pObject))
{
previousNode.setNext(nextNode);
nextNode.setPrevious(previousNode);
}
currentNode=nextNode;
}
}
此方法适用于整数和字符串,但不适用于对象,示例如下:
DSALinkedList list=new DSALinkedList();
Connection connection1=new Connection("abc", "def", 10, 1, "stairs");
Connection connection2=new Connection("ghi", "jkl", 10, 1, "stairs");
Connection connection3=new Connection("mno", "pqr", 10, 2, "construction");
list.insertLast(connection1);
list.insertLast(connection2);
list.insertLast(connection3);
Connection tempConnection=new Connection("ghi", "jkl", 10, 1, "stairs");
list.delete(tempConnection);
与 connection2 对象相同的 tempConnection 对象不会被删除。我认为我的 delete 方法在检查 2 个对象是否相等时有问题,我该如何更正它?
这里的问题是 tempConnection
是一个新对象,其参数与 connection2
相同。在您的删除方法中,您正在使用 equals
检查是否相等。
默认情况下,Java 将检查它们是否是相同的引用。在您的情况下,它们不是,因此不会被删除。
您需要覆盖 Connection
class 中的 equals()
方法。在这里,您实际上将检查参数是否相同,而不是引用。
您的 delete
方法将按预期工作。