簡體   English   中英

擴展Java的鏈表供個人使用

[英]extending Java's Linked List for personal use

因此,我需要一個鏈表來存儲多個變量,因此我想使用手工制作的鏈表ADT,還希望Java的鏈表的Comparator Sorts來自collections.sort();。

所以我嘗試並編輯了我的代碼,如下所示:

public class HLinkedList <HTreeNode>  extends LinkedList <HTreeNode>
{

public class HTreeNode {


    public HTreeNode left;
    public HTreeNode right;
    public HTreeNode next;
    public int frequency;
    public char value;
    public String code;
    public HTreeNode(int freq, char val, HTreeNode l, HTreeNode r, HTreeNode n, String code) // code is the path taken to this node, how to explain it in code?
    {
        value = val;
        frequency = freq;
        left = l;
        right = r;
        next = n;
        code = ""; // just initialized ,but have to think through logic.
    }
}

但是,如果我這樣做,則不僅僅是public class HLinkedList (這很好,但我不能使用Collections.sort(HList, comparatorA) ,這是我需要具有Java的鏈表的一行代碼。

無論如何,如果我的代碼如上所示,它將返回一個

cannot make static reference to non-static type HTreeNode in following line, 

在HTreeNode下有紅色襯里。 如果我不嘗試擴展LinkedList,則不會發生這種情況。

public static void insertIntoPosition(HTreeNode node, int position)

也跟隨上述錯誤是在

public HLinkedList() //constructor
{
    head = null; //inital value
    nItem = 0;//counter

}

代碼中多次出現表示它們不能靜態引用非靜態頭。 通常,當出現類似這樣的問題時,我單擊“使該頭變為靜態”,但是在這種情況下,我彈出了更多錯誤,現在指向所有“頭”引用。

我只想知道在嘗試擴展LinkedList失敗時發生了什么,或者是否應該擴展而不是做其他事情?

以下方法是一個類方法

 public static void insertIntoPosition(HTreeNode node, int position)

因此,它不需要HLinkedList實例即可被調用。

但是,您的類HTreeNode是一個內部類 -需要實例化HLinkedList的“附加”實例。

這兩個事實相互矛盾(您無法在此方法中實例化此類型的對象)

您可以將static關鍵字添加到HTreeNode的聲明中,以克服此問題:

public static class HTreeNode { //note the static keyword usage
    ....
}

另一個問題是,您不應在HLinkedList上具有泛型類型限定符。 它沒有按照您的想法做。 您要指定的是創建一個存儲“內容”的類,這不是內部類。 相反,你需要移動HTreeNode類外HLinkedList ,然后用這個來代替:

public class HLinkedList extends LinkedList <HTreeNode>

否則,泛型類型將隱藏內部類,我還可以創建一個存儲字符串的HLinkedList

HLinkedList<String> hll = new HLinkedList<String>();
hll.add("Hello World");

暫無
暫無

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

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