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异常。谁有人向我解释这个?它与序列化有什么关系吗?感谢
答案 0 :(得分:0)
array.get(i).get(2);
中的嵌套ArrayList
array
的大小为1,因此当您尝试获取第二个元素(不存在)时,您将获得OutOfBoundsException。
name
结果将为null。您需要弄清楚为什么数组中的嵌套ArrayList没有预期的两个元素。