繁体   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