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

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


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;


梦里花落0921
浏览 241回答 3
3回答

猛跑小猪

这是因为anArrayList<ArrayList<Integer>>不是List<List<Integer>>。原因是aList<List<Integer>>是您应该能够添加LinkedList<Integer>到的东西。但是您不能将LinkedList<Integer>an添加到an,ArrayList<ArrayList<Integer>>因为它是错误的类型。因此,如果您有个ArrayList<ArrayList<Integer>>,则永远不能将其视为List<List<Integer>>,也不能使用类型为变量的变量对其进行引用List<List<Integer>>

UYOU

这是Java泛型。List<List<Integer>> ans = new ArrayList<ArrayList<Integer>>()因为外部列表期望自己保持不变List<Integer>,所以它不起作用ArrayList<Integer>。考虑一下:List<Number>&nbsp;list&nbsp;=&nbsp;new&nbsp;ArrayList<Integer>();这也不起作用,因为该列表期望Number而不是Integer。无论如何,在嵌套列表时,您还需要实例化内部列表。列表列表不能像多维数组那样工作。

红颜莎娜

但我无法实例化ArrayLists的ArrayList吗?因为您将类型指定ans为“列表列表”而不是“ ArrayLists列表”。List<List<Integer>> ans = new ArrayList<ArrayList<Integer>>();上面没有用我想如果声明将是可行的:List<? extends List<Integer>> ans = new ArrayList<ArrayList<Integer>>();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java