Расширение связанного списка 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");