Как я могу проверить, существует ли элемент по индексу в LinkedList - PullRequest
0 голосов
/ 09 июля 2019

У меня есть класс с именем Modul, и я добавляю их элементы в свой LinkedList. Теперь я хочу написать метод, в котором я ввожу целое число и проверяю, есть ли элемент с этим индексом в списке или он пустой. если есть элемент, я его верну, а если нет, я хочу вернуть ноль и сообщение об ошибке.

Я думал об использовании оператора if, но в конечном итоге не могу придумать метод, который проверяет наличие элемента. Теперь я подумал об использовании try-catch, но не знаю, какую ошибку мне нужно будет отловить.

import java.util.LinkedList;

public class Modulhandbuch {
    private String nameStudienordnung;
    private LinkedList<Modul> liste;

    public Modulhandbuch(String nameStudienordnung) {
        this.nameStudienordnung = nameStudienordnung;
        liste = new LinkedList<Modul>();
    }

    public void einfuegenModul(Modul m) {
        liste.add(m);
    }

    public int anzahlModule() {
        return liste.size();
    }

    public Modul ausgebenModul(int i) {
        try {
            return liste.get(i);
        }catch() //I don't know what error i would need to catch
    }

}

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Вы получите исключение нулевого указателя, если вы дадите методу целочисленное значение, которое больше, чем размер списка, поскольку этот индекс не существует, поэтому вам необходимо проверить это.Метод ниже правильно обрабатывает этот случай.

public Modul ausgebenModul(int i) {
    if (i >= anzahlModule)
        return null;
    else
        return liste.get(i);
}
0 голосов
/ 09 июля 2019

Индексирование связанного списка - пустая трата памяти. Для того чтобы добраться до этого индекса в связанных списках, требуется O (n), если вы настаиваете на этом, вы можете добавить свойство к индексу Node int и с помощью конструктора Node () увеличить это значение.и установите этот экземпляр в это значение, теперь есть несколько небольших проблем с этим, что произойдет, когда вы удаляете узел при запуске?да, большая проблема, весь список должен быть переиндексирован, что делает процесс удаления из Start, который является O (1) операцией O (n)

, вы можете сделать трюк, чтобы проиндексировать его или создать иллюзию индексациипросто не делайте этого, когда вы запрашиваете список (6), итератор считает 6 узлов, начиная с 0 и заканчивая этим узлом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...