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 异常。谁能给我解释一下?它与序列化有什么关系吗?谢谢