0

所以我需要一个链表来存储多个变量,所以我想用我手工制作的Linked List ADT,还想要Java的Linked List的Comparator Sort from 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但失败时发生了什么,或者我是否应该不扩展但可能做其他事情?

4

2 回答 2

2

另一个问题是您不应该在HLinkedList. 它没有做你认为的那样。您指定的是创建一个存储“某物”的类,这不是内部类。相反,您需要将HTreeNode类移到外面HLinkedList,然后改用它:

public class HLinkedList extends LinkedList <HTreeNode>

否则,泛型类型会隐藏内部类,我还可以创建一个HLinkedList存储字符串的类型。

HLinkedList<String> hll = new HLinkedList<String>();
hll.add("Hello World");
于 2012-10-19T00:41:31.073 回答
2

以下方法是类方法

 public static void insertIntoPosition(HTreeNode node, int position)

因此,它不需要一个实例HLinkedList就可以被调用。

但是,您的类HTreeNode是一个内部类- 并且需要一个“附加”实例HLinkedList才能被实例化。

这两个事实相互矛盾(您不能在此方法中实例化此类型的对象)

您可以将static关键字添加到声明HTreeNode中以克服此问题:

public static class HTreeNode { //note the static keyword usage
    ....
}
于 2012-10-19T00:01:27.793 回答