所以这是我自我调整链表的代码。它应该搜索" 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 }
答案 0 :(得分:0)
您必须覆盖E的equals方法。否则,默认的equals方法会检查哈希码。即使值相同,它也总是对于不同的对象是假的。
假设您的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级中超越平等。