空指针和索引超出ArrayList和Map的范围

时间:2013-04-28 02:36:00

标签: java serialization nullpointerexception maps indexoutofboundsexception

public class DataStorage implements java.io.Serializable {
private static final long serialVersionUID = -5597052819894601310L;
private ArrayList<ArrayList<String>> array = new ArrayList<>();
private Map<String, String[]> nameMap;
private int index = 0;

DataStorage() {
    array.add(index, new ArrayList<String>());
}
public void addDataToRow() {
    index += 1;
    array.add(index, new ArrayList<String>());
    array.get(index).add(new String());
}

public void addDataToColumn(int pos, String data) {
    array.get(index).add(pos, data);
}

public int rowSize() {
    return array.size();
}

public int colSize() {
    return array.get(index).size();
}

public String initNameMap() {
    nameMap = new TreeMap<>();
    String out = "";
    for(int i = 2; i < array.size(); i++) {
        String[] infoHolder = new String[40];
        String name = array.get(i).get(2);
        int index = 0;
        for(int w = 3; w < array.get(i).size(); w++) {
            System.out.println(index);
            infoHolder[index] = array.get(i).get(w);
            index++;
        }
        nameMap.put(name, infoHolder);
    }

    for(String x : nameMap.keySet()) out += x + "\n";
    return out;

}

public String navigateArray(int rStart, int cStart) {
    String out = "";
    for(int i = rStart; i < array.size(); i++) {
        for(int w = cStart; w < array.get(i).size(); w++) {
            out += array.get(i).get(w) + " ";
        }
        out += "\n";
    }
    return out;
}

}

所以这就是正在发生的事情。我有这个问题中包含的课程。我创建了这个类的对象,并使用文件中的信息填充了此类中的ArrayList,然后我对该对象进行了序列化。后来,我添加了initNameMap()方法,并添加了一个初始化为TreeMap的Map。现在,我已经反序列化了之前序列化的对象,并且可以检索其中的信息,但是当我调用initNameMap()方法时,它给出了以下例外:

java.lang.IndexOutOfBoundsException:Index:2,Size:1代码段:

String name = array.get(i).get(2);

以及此段代码中的java.lang.NullPointerException:

nameMap.put(name, infoHolder);

我根本不明白为什么会这样。这对我来说非常困惑,特别是indexoutofbounds异常。谁有人向我解释这个?它与序列化有什么关系吗?感谢

1 个答案:

答案 0 :(得分:0)

array.get(i).get(2);

中的嵌套ArrayList
array

的大小为1,因此当您尝试获取第二个元素(不存在)时,您将获得OutOfBoundsException。

name
结果

将为null。您需要弄清楚为什么数组中的嵌套ArrayList没有预期的两个元素。