【问题标题】:Find Method in Linked List does not work with some numbers链表中的查找方法不适用于某些数字
【发布时间】:2020-10-14 15:35:46
【问题描述】:

我不知道为什么 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;
    }

【问题讨论】:

  • 数字的数据类型是什么? tmp.elememt 是什么?我很确定您只是在比较参考而不是数据本身。

标签: java list linked-list find


【解决方案1】:

您的问题很可能是:

    if (tmp.element == o) {
        return tmp;
    }

这是使用引用相等而不是值相等来比较对象。您想为此使用.equals。您提到它适用于某些数字,我猜这意味着您的测试中有 DLLNode&lt;Integer&gt; - 您可能只是遇到了 JVM 缓存了一小部分 Integer 对象的事实(我认为介于 -127 和+128) 所以这些在使用== 时似乎可以工作。

【讨论】:

  • 你忘记了一个引用相等
【解决方案2】:

您需要使用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;
    }

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多