我有一个返回整数列表的函数
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;
答案 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>>();