Расширение связанного списка Java для личного использования

Поэтому мне нужен связанный список для хранения нескольких переменных, поэтому я хочу использовать свой ADT Linked List, созданный вручную, но также хочу, чтобы Java Comparator Sort from collection.sort() связывал Java.

Поэтому я попробовал и отредактировал мой код следующим образом:

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 LinkedList.

в любом случае, если у меня есть код, как показано выше, он возвращает

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, или если я должен не расширять, а делать что-то еще, может быть?

2 ответа

Решение

Следующий метод является методом класса:

 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");
Другие вопросы по тегам