#java #nodes #doubly-linked-list
#java #узлы #дважды связанный список
Вопрос:
Я ищу способ заставить мои объекты minecart действовать как узел, чтобы они могли удаляться из списка, но я боюсь, что текущий дизайн кода вызывает проблемы, позволяющие это.
Я думаю, это из-за разных типов: <T extends MineCart>
vs <MineCart>
.
Я не ищу ответа о том, как написать метод remove, а скорее ищу решение, чтобы объект MineCart мог действовать как узел. Я был бы признателен за несколько советов о том, как решить эту проблему.
Linkedlist (отображается только соответствующая часть)
public class MyCustomLinkedList<T extends MineCart> implements Iterable<T> {
//... your typical list methods (e.g. add/remove etc)
public static class Node<T> {
private T item;
private Node<T> prev, next;
public Node(T item, Node<T> prev, Node<T> next) {
this.item = item;
this.prev = prev;
this.next = next;
}
}
}
Класс MineCart (отображается только соответствующая часть)
public abstract class MineCart implements Comparable<MineCart> {
public MineCart nextCart;
public MineCart prevCart;
public MineCart getNextMineCart() {
// and then do something like this:
// return this.next;
// or return nextCart;
}
}
Комментарии:
1. В чем на самом деле ваш вопрос? Какова связь между Wagon и MineCart?
2. @Confusion srry это была опечатка, я ее исправил. В чем заключается мой актуальный вопрос (простая версия) У меня есть объект MineCart -> теперь заставьте его работать как узел
3. Зачем вам нужен класс Node, поскольку в MineCart есть вся информация (предыдущая, следующая)?
4. вызов this.next в классе MineCart не работает, также nextCart имеет значение null;
Ответ №1:
Чтобы позволить мини-тележке удалить себя из списка:
public abstract class MineCart implements Comparable<MineCart> {
public void remove() {
prevCart.nextCart=nextCart;
}
}
перед:
[cart1] - [cart2] - [cart3]
cart2.remove()
после:
[cart1] - [cart3]
[cart2]
Поскольку MineCart знает о своих соседях, вам не нужен класс Node.
Комментарии:
1. Мой плохой, я не искал решения о том, как написать метод remove. Я обновил вопрос, чтобы сделать его немного более понятным.