将String与Null对象进行比较

时间:2012-02-19 12:07:20

标签: java

我有一个非常简单的问题,我无法理解我应该如何进一步行动。

我有一个双向链表,其中第一个节点是空对象,最后一个节点是空对象。

我想在第一个节点和最后一个节点之间插入一个各种字符串元素。例如 - 我有字符串元素“C”,“D”,“A”,“P”。

插入双重链表后。我需要一些这样的插入顺序 -

FirstNullObject P D C LastNullObject

所以我不确定如何将null对象与我想要比较的各种字符串进行比较并继续添加。假设我首先添加C然后以某种方式我必须在这两个null对象之间插入C.然后,如果我要添加D,那么我必须将D与C进行比较,然后列表应该像这样 -

FirstNullObject D C LastNullObject

这里newLink是新的节点,如C,D和firstNode是null对象。但这不起作用。我总是得到例外。

if (newLink.data.compareToIgnoreCase(list.firstNode.data) > 0) {

        //logic

        }

我希望问题很清楚

4 个答案:

答案 0 :(得分:3)

你从未问过一个问题,所以不,问题不明确。

可能是“我如何确定对象是否为空?”答案:

o == null

可能是,“我怎么能确定我在链表的末尾?”答案:当下一个节点为空时,你有最后一个节点。

可能是,“我如何在链表中表示终端节点?”答案:它与任何节点相同,但是引用列表中下一个节点的字段为空。

它可能是,“我怎么能有一个既可以是列表节点也可以是null的字段?我需要一些神奇的NodeONull,还是......?”答案:该字段只有您的节点类型,您只需将其指定为null。阅读section 4.1

它可能是,“我怎么能有一个字段既可以是列表的字符串成员,又有时会有一些特殊值作为列表的标记?”答案:呃,什么?节点的“值”字段与列表的结构完全没有关系。你问这个问题表明你已经在旷野中使用你的代码,并且应该参考你的课程资料,了解你究竟要处理什么。

我知道你谈到的是双向链表;这些答案都没有改变。是的,我认为上述任何一个都可能是您正在寻找的答案。

编辑:

  

和firstNode是空对象

是的,你出去了旷野。

  1. 除了技术上,您的哨兵不是节点。

  2. 您的哨兵没有您感兴趣的.data字段。

  3. 你实际上在这里做的事情 - 或者当你得到错误时一半做 - 正在尝试在列表中使用特殊的“第一个”和“最后一个”和“中间”节点。三种不同的节点,也许您还想到了一个“空列表”对象。由于这是愚蠢的,可能你只是因为你不明白你要做什么而这样做。

  4. 你要做的更像是

    class Cons {
      public String data;
      public Cons prev;
      public Cons next;
      Cons(String data, Cons prev, Cons next) { ... }
    }
    

    空列表:null

    一个成员列表:新Cons(“a”,null,null);

    三人名单:

    Cons list = new Cons("a", null, null);
    list.next = new Cons("b", list, null);
    list.next.next = new Cons("c", list.next, null);
    

    当您从链接列表移动到双向链接列表时没有太大变化,当您从Java提供的特殊子类型Cons(即null)转移到您自己的子类型时,没有太大变化

答案 1 :(得分:1)

如果您已正确实现Null对象模式,那么而不是像

那样
if (newLink.data.compareToIgnoreCase(list.firstNode.data) > 0) {

    //logic

    }

您应该执行类似

的操作
if (newLink.equals(list.firstNode)) {

    //logic

    }

提供适当地覆盖equals和hashcode。

答案 2 :(得分:1)

Null对象应该是对象,而不是null(对于Java) - 这是模式的主要意图。您需要拥有一些基本上“什么都不做”的数据类的子类(请参阅this article,C ++或C#示例可以很好地为您提供有关Java应该做什么的线索)并且不代表任何有效您域中类型的对象。

答案 3 :(得分:0)

您无法将null与Object进行比较,因为null不是对象。见Is null an Object?。为什么你还想要这些“NullObjects”?