链表中的查找方法不适用于某些数字
Find Method in Linked List does not work with some numbers
我不知道为什么 find() 方法对某些数字不起作用。这是代码。
我说的是在双链表中查找元素。
public DLLNode<E> find(E o) {
if (first != null) {
DLLNode<E> tmp = first;
while (tmp.element != o && tmp.succ != null)
tmp = tmp.succ;
if (tmp.element == o) {
return tmp;
} else {
System.out.println("Element does not exist in a list");
}
} else {
System.out.println("List is empty");
}
return first;
}
您的问题很可能是:
if (tmp.element == o) {
return tmp;
}
这是使用引用相等比较对象,而不是值相等。你想为此使用 .equals
。你提到它适用于某些数字,我猜这意味着你在测试中有一个 DLLNode<Integer>
- 你可能只是 运行 到 JVM 缓存一小部分 Integer 对象的事实(我认为在 -127 和 +128 之间)所以这些在使用 ==
.
时似乎有效
您需要使用 equals
而不是 ==
==
比较引用,例如:
new Double( 2d ) == new Double( 2d )
将为假,
但 new Double( 2d ).equals(new Double( 2d ))
会成立。
public DLLNode<E> find(E o) {
if (first != null) {
DLLNode<E> tmp = first;
while (!tmp.element.equals(o) && tmp.succ != null)
tmp = tmp.succ;
if (tmp.element.equals(o)) {
return tmp;
} else {
System.out.println("Element does not exist in a list");
}
} else {
System.out.println("List is empty");
}
return first;
}
我不知道为什么 find() 方法对某些数字不起作用。这是代码。 我说的是在双链表中查找元素。
public DLLNode<E> find(E o) {
if (first != null) {
DLLNode<E> tmp = first;
while (tmp.element != o && tmp.succ != null)
tmp = tmp.succ;
if (tmp.element == o) {
return tmp;
} else {
System.out.println("Element does not exist in a list");
}
} else {
System.out.println("List is empty");
}
return first;
}
您的问题很可能是:
if (tmp.element == o) {
return tmp;
}
这是使用引用相等比较对象,而不是值相等。你想为此使用 .equals
。你提到它适用于某些数字,我猜这意味着你在测试中有一个 DLLNode<Integer>
- 你可能只是 运行 到 JVM 缓存一小部分 Integer 对象的事实(我认为在 -127 和 +128 之间)所以这些在使用 ==
.
您需要使用 equals
而不是 ==
==
比较引用,例如:
new Double( 2d ) == new Double( 2d )
将为假,
但 new Double( 2d ).equals(new Double( 2d ))
会成立。
public DLLNode<E> find(E o) {
if (first != null) {
DLLNode<E> tmp = first;
while (!tmp.element.equals(o) && tmp.succ != null)
tmp = tmp.succ;
if (tmp.element.equals(o)) {
return tmp;
} else {
System.out.println("Element does not exist in a list");
}
} else {
System.out.println("List is empty");
}
return first;
}