我创建了一个链接列表,具有插入、搜索和删除功能。我还为它创建了一个迭代器。现在,假设我这样做:
myList<Integer> test = new myList();
test.insert(30);
test.insert(20);
test.insert(10);
myList.iterator it = test.search(20);
if(it.hasNext())
System.out.println(it.next());
瞧,它起作用了(它在节点上打印元素的值,在本例中为 20)。现在,如果我这样做:
myList<Double> test = new myList();
test.insert(30.1);
test.insert(20.1);
test.insert(10.1);
myList.iterator it = test.search(20.1);
if(it.hasNext())
System.out.println(it.next());
它没有,因为迭代器指向 null。下面是搜索功能的实现:
public iterator search(T data)
{
no<T> temp = first;
while( (temp != null) && (temp.data != data) )
temp = temp.next;
return (new iterator(temp));
}
以下是我如何知道比较有问题的方法:如果我像这样更改上述代码的一部分:
while( (temp != null) && (temp.data != data) )
System.out.println(temp.data + " " + data);
temp = temp.next;
我可以看到它打印列表中的数字。它在某一时刻打印“20.1 20.1”(例如)。那么我该如何解决这个问题呢?该函数似乎是正确的,但似乎 Java 没有正确比较数字。
编辑:wth,BigDecimal 也给了我同样的问题。
编辑 2:equals() 有效,没有意识到还有其他问题。对不起。