如何检查LinkedList中的索引处是否存在元素

时间:2019-07-08 21:49:12

标签: java linked-list

我有一个名为Modul的类,正在将它们的元素添加到我的LinkedList中。现在,我想编写一个方法,在其中输入一个Integer并检查列表的索引处是否有一个元素或该元素是否为空。如果有一个元素,我将返回它,如果没有,我想返回null和错误消息。

我曾经考虑过使用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 个答案:

答案 0 :(得分:1)

如果为该方法提供一个大于列表大小的整数值,则会得到一个空指针异常,因为此索引不存在,因此需要检查该值。下面的方法可以正确处理这种情况。

public Modul ausgebenModul(int i) {
    if (i >= anzahlModule)
        return null;
    else
        return liste.get(i);
}

答案 1 :(得分:0)

索引链表是浪费内存,如果您坚持要花O(n)来获取链表中的该索引,则可以向Node int索引添加属性,并通过构造器Node()增加它并将该实例设置为该值,现在在开始删除节点时会发生什么问题呢?是的,很大的问题必须重新索引整个列表,这使得从Start删除的过程是O(1)的O(n)操作

您可以做一个技巧来为其编制索引,或者给您一种被索引的错觉,只是在您请求list(6)时不要这么做,迭代器从6个节点开始,这些节点从0开始并在该节点处停止