链表中的查找方法不适用于某些数字

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;
    }