2014-10-10 65 views
-1

所以對於我的班級,我必須編寫自己的鏈接列表。我主要是不懂,但老師寫的MYNODE類通用鏈接列表

public class MyNode<E extends Comparable<E>> { 
     E element; 
     MyNode<E> next; 

    public MyNode(E item) { 
    element = item; 
    next = null; 
    } 
} 

而且我們是爲了使一個類來運行它,並讓它運行這個程序

public class TestLinkedList { 
    public static void main(String[] args) { 
    MyLinkedList<String> L = new MyLinkedList<String>(); 
    L.add("Browns"); 
    L.add("Ravens"); 
    L.add("Steelers"); 
    L.add("Bengals"); 
    L.add("Chargers"); 
    System.out.println(L); 
    System.out.println(L.find("Ravens") ? "Found Ravens" : "Did not find Ravens"); 
    System.out.println(L.find("Giants") ? "Found Giants" 
      : "Did not find Giants"); 
    L.insertElementBefore("Steelers", "Colts"); 
    L.delete("Chargers"); 
    System.out.println("Result after deleting Chargers: " + L); 
} 

} 

但我不明白爲什麼節點延伸可比。我發現很多例子,其中節點只是節點E,但沒有這樣的,我只是難以理解如何使用它來寫我的鏈表。

+0

這是用'MyLinkedList.find()'實現的嗎?該方法是否使用Comparable接口? – PeterK 2014-10-10 14:44:27

+2

通常,當您想在列表上進行比較操作時,可以進行比較。由於MyNode對象是用戶定義的,因此Java無法輕鬆比較它們。 例如:Java知道如何比較數字的'大於'。它知道5大於3,但它如何知道MyNodeA比MyNode B大。 – nbz 2014-10-10 14:44:42

+0

查看本教程,瞭解爲什麼要擴展可比接口 - http://www.java-tips.org/java- se-tips/java.lang/how-to-use-comparable-interface.html – nbz 2014-10-10 14:45:30

回答

2

Comparable的想法是使節點易於比較。在技​​術層面上,它強加了一個總的順序:有一個明確的不等於對象的順序(小於或等於是一個操作員強加一個總順序的例子)。正如nEm在評論中指出的那樣,Java不知道一個對象與另一個對象「不如」是什麼意思,不像整數;這就是compareTo(由Comparable接口公開的方法)的用途。

如果不知道鏈表實現的完整接口,就不可能說出它的用處。如果您需要實施該功能,一些受過教育的猜測包括Node.insertElementBefore功能或Node.find

3

首先要做的事情是:節點是而不是擴展可比較,節點類型的E類型擴展爲Comparable。

通用結合<E extends Comparable<E>>是「自參考」的約束,裝置的類型E實現Comparable<E>接口,其具有方法int compareTo(E e)

您處理Comparable對象的常見原因是您可以對它們進行排序 - 用java的說法,它們有一個自然排序順序

您的任務是實現在MyLinkedList類上調用的各種方法。如果從示例代碼中調用的方法是唯一的方法,那麼通用類型MyNode就不需要爲Comparable - 即MyNode<E>就可以。

+0

我想使用MyNode沒有可比性,因爲這是一個已經定義好幾次的例子。但是,我的老師讓我使用它,我試圖創建一個包含節點的鏈表,但是對這些節點如何工作甚至是如何處理它們感到困惑。每個節點是爲了保持一個值還是什麼?我需要創建一個add方法,它的作用就像爲Java鏈接列表添加一個值並找到一個remove和一個將其插入到一個元素之前我相信是一個字符串方法,但是一旦我理解了其餘部分,它應該不是問題 – 2014-10-12 22:04:14

+0

如果節點是Comparable(並且您將委派節點比較它們的值)或者您想爲節點構建比較器(類似的方法),則只需要該值爲Comparable。除非其中之一是陳述的原因,否則將該值設爲可比較是一個設計缺陷。是的,每個節點都有一個值。您的節點類還應該具有對列表中下一個節點的引用(「鏈接」),以及用於添加,插入的方法。這些方法是遞歸的,調用下一個鏈接的相同方法直到'this'鏈接是執行操作的正確鏈接。 – Bohemian 2014-10-12 22:16:49

+0

感謝您的幫助。我仍然沒有運氣。我無法編輯節點類或主類。我一直在做一個節點陣列,但是當我做system.out.println(l)時,我得到了mylinkedlist @然後是內存位置。希望我能在交付之前與我的教授交談,我現在看到了這樣做的方式 – 2014-10-12 22:59:25