无法将ArrayLists的ArrayList实例化为Java中的列表列表

时间:2018-06-20 02:20:48

标签: java arraylist

我有一个返回整数列表的函数

public List<List<Integer>> threeSum(int[] nums)

很明显,我无法直接实例化一个List,所以我选择使用ArrayList并尝试实例化我的返回值,例如:

List<List<Integer>> ans = new ArrayList<ArrayList<Integer>>();

上面的方法不起作用,但是可以:

List<List<Integer>> ans = new ArrayList<List<Integer>>();

我的理解是List是ArrayList继承的接口。那么,为什么为什么我可以实例化列表的ArrayList并确定却不能实例化ArrayLists的ArrayList?

为了便于阅读,我函数的前几行如下:

public List<List<Integer>> threeSum(int[] nums) {
    List<List<Integer>> ans = new ArrayList<List<Integer>>();
    if (nums.length < 3) return ans;

3 个答案:

答案 0 :(得分:1)

这是因为ArrayList<ArrayList<Integer>>不是List<List<Integer>>

原因是您应该能够将List<List<Integer>>添加到LinkedList<Integer>中。但是您不能将LinkedList<Integer>添加到ArrayList<ArrayList<Integer>>,因为它是错误的类型。

因此,如果您拥有ArrayList<ArrayList<Integer>>,则永远不能将其视为List<List<Integer>>,或使用类型为List<List<Integer>>的变量来引用它

答案 1 :(得分:1)

这是Java泛型。 List<List<Integer>> ans = new ArrayList<ArrayList<Integer>>()不起作用,因为外部列表希望自己保留List<Integer>,而不是ArrayList<Integer>

考虑一下:

List<Number> list = new ArrayList<Integer>();

这也不起作用,因为列表期望Number,而不是Integer

无论如何,嵌套列表时,也需要实例化内部列表。列表列表不能像多维数组那样工作。

答案 2 :(得分:1)

  

但是我无法实例化ArrayLists的ArrayList吗?

因为您将ans的类型指定为“列表列表”而不是“ ArrayLists列表”。

  

List<List<Integer>> ans = new ArrayList<ArrayList<Integer>>();

     

以上操作无效

我想如果声明为:

List<? extends List<Integer>> ans = new ArrayList<ArrayList<Integer>>();