以随机方式访问列表列表

时间:2014-11-13 09:32:22

标签: java

我试图创建一个列表列表并根据需要填充它们,但我得到了数组超出范围的异常。我的代码是:

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);
    }
}

2 个答案:

答案 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);
    }

现在它应该可以正常工作;