我试图创建一个列表列表并根据需要填充它们,但我得到了数组超出范围的异常。我的代码是:
List<List<String>> seperatedData = new ArrayList<List<String>>();
int index;
while ((line = br.readLine()) != null) {
String[] data = line.split(",");
index = data[0].hashCode() % redCount;
if(seperatedData.get(index) == null) {
List<String> single = new ArrayList<String>();
seperatedData.add(single);
seperatedData.get(index).add(line);
} else {
seperatedData.get(index).add(line);
}
}
答案 0 :(得分:1)
变量seperatedData
为空List
。因此,第一次执行if(seperatedData.get(index) == null)
时,您会获得IndexOutOfBoundsException
,而不是index
的值。
答案 1 :(得分:0)
你不能这样List
:
假设您有包含5
元素的列表,并尝试向索引10
添加内容。它是null
,因此您创建新的子列表并将其添加到集合中。但是它不会被添加到第十个位置,但是它可以在下一个索引处访问(在这种情况下,它将是5,总共产生6个项目。)
所以下面的代码是错误的
seperatedData.add(single);
seperatedData.get(index).add(line);
修复它使用Map
Map<Integer,List<String>> seperatedData = new HashMap<>();
并使用它:
if(seperatedData.get(index) == null) {
List<String> single = new ArrayList<String>();
seperatedData.put(single);
seperatedData.get(index).add(line);
} else {
seperatedData.get(index).add(line);
}
现在它应该可以正常工作;