首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >扩展Java的链表以供个人使用

扩展Java的链表以供个人使用
EN

Stack Overflow用户
提问于 2012-10-19 07:53:31
回答 2查看 8.1K关注 0票数 0

所以我需要一个链表来存储多个变量,所以我想使用我自己制作的链表ADT,但也想要collections.sort()中的Java链表的比较排序;

所以我尝试并编辑了我的代码,如下所示:

代码语言:javascript
运行
复制
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的链表的一行代码。

无论如何,如果我有如上所示的代码,它将返回一个

代码语言:javascript
运行
复制
cannot make static reference to non-static type HTreeNode in following line, 

在HTreeNode下面有红线。如果我不尝试扩展LinkedList,就不会发生这种情况。

代码语言:javascript
运行
复制
public static void insertIntoPosition(HTreeNode node, int position)

上面的错误后面还有一个错误

代码语言:javascript
运行
复制
public HLinkedList() //constructor
{
    head = null; //inital value
    nItem = 0;//counter

}

其中,代码中的多次出现表明它们不能静态引用非静态头部。通常,当出现这样的东西时,我会单击"make that head static",但在这种情况下,当我这样做时,更多的错误会弹出,现在指向所有的"head“引用。

我只是想知道当我尝试扩展LinkedList失败时发生了什么,或者我是不是应该不扩展而是做一些其他的事情?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-19 08:01:28

下面的方法是一个类方法

代码语言:javascript
运行
复制
 public static void insertIntoPosition(HTreeNode node, int position)

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

然而,您的类HTreeNode是一个内部类-并且需要一个HLinkedList的“被捕获”的实例才能被实例化。

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

您可以在HTreeNode的声明中添加static关键字来克服这一点:

代码语言:javascript
运行
复制
public static class HTreeNode { //note the static keyword usage
    ....
}
票数 2
EN

Stack Overflow用户

发布于 2012-10-19 08:41:31

另一个问题是,您不应该在HLinkedList上使用泛型类型限定符。它并不是你想的那样。您指定的是创建一个存储“某些东西”的类,而这不是内部类。相反,您需要将HTreeNode类移到HLinkedList之外,然后使用下面的代码:

代码语言:javascript
运行
复制
public class HLinkedList extends LinkedList <HTreeNode>

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

代码语言:javascript
运行
复制
HLinkedList<String> hll = new HLinkedList<String>();
hll.add("Hello World");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12965470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档