簡體   English   中英

比較字符串和空對象

[英]Compare String with Null Object

我有一個非常簡單的問題,我無法理解應該如何進一步發展。

我有一個雙向鏈表,其中第一個節點為空對象,最后一個節點為空對象。

我有一個各種各樣的字符串元素,我想在第一個和最后一個節點之間插入。 例如-我有字符串元素“ C”,“ D”,“ A”,“ P”。

並插入到雙鏈表之后。 我需要這樣的插入順序-

FirstNullObject PDCA LastNullObject

因此,我不確定如何將空對象與要比較的各種字符串進行比較並繼續添加。 假設首先我要添加C,然后以某種方式必須在這兩個空對象之間插入C。 然后,如果我要添加D,則必須將D與C進行比較,然后列表應如下所示:

FirstNullObject DC LastNullObject

這里的newLink是newNode,例如C,D,而firstNode是null對象。 但這是行不通的。 我總是例外。

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

        //logic

        }

我希望問題清楚

您從未問過一個問題,所以不,這個問題不清楚。

可能是“如何確定對象是否為空?” 答案:

o == null

可能是:“我如何確定自己在鏈表的末尾?” 答案:當下一個節點為空時,您將擁有最后一個節點。

可能是,“我如何在鏈表中表示終端節點?” 答案:它與任何節點相同,但是將引用列表中下一個節點的字段為空。

可能是:“我如何擁有一個既可以是列表節點又有時為null的字段?我需要一些神奇的NodeONull還是...?” 答案是:該字段僅具有您節點的類型,而您只需將其分配為null。 閱讀第4.1節

可能是:“我如何擁有一個既可以是列表的String成員又有時可以用作列表標記的特殊值的字段?” 答案:呃,什么? 節點的“值”字段與列表的結構完全無關。 您提出的這個問題表明,您將帶着代碼無所適從,並應參考課程材料,確切了解要處理的內容。

我知道您說的是雙向鏈接列表; 這些答案都不會改變。 是的,我認為以上任何一種可能都是您想要的答案。

編輯:

並且firstNode是null對象

是的,你在曠野。

  1. 除了技術上,您的哨兵不是節點。

  2. 您的哨兵沒有您感興趣的.data字段。

  3. 您實際上在這里所做的(或半途而廢,因為您遇到錯誤)正試圖在列表中具有特殊的“第一”,“最后”和“中間”節點。 三種獨立的節點,也許您還想到了一個“空列表”對象。 由於這是愚蠢的,可能您之所以這么做是因為您不了解自己該做什么。

您要做的更像是

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

空列表:null

一個成員列表:new 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 )移到自己的子類型時,也沒有什么變化。

如果您已經正確實現了Null對象模式,那么不要像這樣

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

    //logic

    }

你應該做類似的事情

if (newLink.equals(list.firstNode)) {

    //logic

    }

提供給覆蓋的equals和適當的哈希碼。

空對象應該是一個對象 ,而不是null (對於Java)-這是模式的主要目的。 您需要有一個數據類的子類,該子類本質上“什么都不做”(請參見本文 ,C ++或C#示例可以很好地為您提供有關Java應該執行的操作的線索),並且不能表示該對象的任何有效對象。輸入您的域。

您不能將null與對象進行比較,因為null不是對象。 請參見將null設為對象嗎? 您為什么仍要這些“ NullObjects”?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM