如何设置嵌套列表的初始容量?

时间:2019-03-28 16:30:55

标签: java java-8

我试图将嵌套ArrayList的初始容量设置为某个值(例如10),但是当我尝试访问内部列表以添加一些元素时,它给了我ArrayOutOfBoundException。请提出一些好的解决方案!!!

下面是代码段

public static void main(String[] args) 
{
    ArrayList<ArrayList<Integer>> bucket = new ArrayList<ArrayList<Integer>>();

    System.out.println(bucket.get(5).add(5));       

    System.out.println(bucket);
}

3 个答案:

答案 0 :(得分:0)

System.out.println(bucket.get(5).add(5));  

您需要了解这一行代码,尝试访问数组列表“ bucket”中的第5个元素,但已在存储桶ArrayList中添加了任何元素(在这种情况下,该元素是另一个元素数组列表)

除非您添加元素,否则将无法访问它们,因为它们不存在,因此在尝试访问ArrayOutOfBoundException的第5个元素时会看到bucket.get(5)

您可能想要遍历ArrayList的javadoc https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

答案 1 :(得分:0)

代码:

 public class Example {

    public static void main(String[] args) {
        ArrayList<ArrayList<Integer>> bucket = new ArrayList<ArrayList<Integer>>();      

        //initial capacity of the nested arraylist to 5.  
        System.out.println(bucket.add(new ArrayList<>(5)));
        ArrayList<Integer> element = new ArrayList<>();
        element.add(5);
        bucket.add(0, element);
        System.out.println(bucket);
    }

}

输出:

true
[[5], []]

答案 2 :(得分:0)

从Java 8开始,您可以使用Stream.generate生成一个空列表。

import java.util.*;
import java.util.stream.*;

public class ListOfLists {
    public static void main(String[] args) {
        List<List<Integer>> bucket = listOfList(10);
        bucket.get(5).add(5);
        System.out.println(bucket);
    }

    public static <T> List<List<T>> listOfList(int size) {
        return Stream.generate(ArrayList<T>::new).limit(size).collect(Collectors.toList());
    }
}

输出

[[], [], [], [], [], [5], [], [], [], []]