arraylist indexoutofboundsexception index 0 size 0

时间:2015-10-29 16:59:59

标签: java arraylist

只是想知道为什么我在matches.set(count,size)运行什么基本上是深度优先搜索算法后得到indexoutofboundsexception?

当我尝试在arraylist中的位置0处运行它时出现错误,这在默认索引处看起来很奇怪。

public void findInheritance(HashMap<String, ArrayList<String>> h, ArrayList<String> a) {

    Queue<String> search = new LinkedList();
    ArrayList<Integer> matches = new ArrayList<Integer>();
    int count = 0;
    String toBeSearched;
    int size = 0;

    for (String key: a) {
        size = 0;
        if (h.get(key).size() > 0 || h.get(key) == null) {
            search.addAll(h.get(key));
            while (search.size() > 0) {
                size++;
                toBeSearched = search.poll();
                if (h.get(toBeSearched).size() > 0) {
                    search.addAll(h.get(toBeSearched));
                }
            }
        }
        matches.set(count, size);
        count++;
    }

    int smallcount = 0;
    for (String b: a) {
        System.out.println(b);
        System.out.println(matches.get(smallcount));
        smallcount++;
    }
}

2 个答案:

答案 0 :(得分:3)

ArrayList<Integer> matches = new ArrayList<Integer>();
[...]
matches.set(count, size);

列表为空,因此索引count没有任何内容,因此无法替换。

此外,

if (h.get(key).size()>0 || h.get(key) == null) {

这一行是错误的:如果h.get(key)可以为null,那么它将导致NullPointerException。您还应该调用get()一次并将结果存储在变量中。

答案 1 :(得分:0)

噢,我的话。我使用.set而不是.add,而ArrayList是空的。我的错。感谢您的快速回复。