这是我的自我调整链表的代码。它应该搜索"item",当它到达"item"时,它会将其转移到列表上的第一个。我测试了代码,我的输出清楚地表明,它绕过了第114行的布尔语句,因为它永远不会成立。有人能帮忙看看问题出在哪里吗?
100 // Return the number of probes to search item in list.
101 public int search(E item) {
102
103 int totalProbes = 0;
104
105 if(numNodes == 0) {
106 System.out.println(totalProbes);
107 return totalProbes;
108 }
109 else if(this.contains(item)) {
110 System.out.println(item);
111 ListNode<E> previous = null;
112 ListNode<E> current = head;
113 while(current != null) {
114 if(current.equals(item)) {
115 previous.setNext(current.getNext());
116 current.setNext(head);
117 head = current;
118 totalProbes++;
119 System.out.println("FOUND" + totalProbes);
120 break;
121 }
122 previous = current;
123 current = current.getNext();
124 totalProbes++;
125 System.out.println(totalProbes);
126 }
127 System.out.println(totalProbes);
128 return totalProbes;
129 }
130 else
131 System.out.println(totalProbes);
132 return totalProbes;
133 }
134 }
你必须重写e的equals方法,否则默认的equals方法会检查哈希码。对于不同的对象,它总是为false,即使值相同。
假设E是一个类MyClass。你必须像下面这样写。
public class MyClass{
private int val1;
private int val2;
@Override
public boolean equals(Object other){
if (other == null) return false;
if (other == this) return true;
if (!(other instanceof MyClass))return false;
MyClass otherMyClass = (MyClass)other;
if(otherMyClass.val1 == this.val1 && otherMyClass.val2 == this.val2)
return true;
else
return false;
}
}
我想,你没有在e类中重写等号。