为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梦里花落0921 2021-04-02 14:11:44
我有一个返回整数列表的函数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 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

这是因为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>>


查看完整回答
反对 回复 2021-04-18
?
UYOU

TA贡献1878条经验 获得超4个赞

这是Java泛型。List<List<Integer>> ans = new ArrayList<ArrayList<Integer>>()因为外部列表期望自己保持不变List<Integer>,所以它不起作用ArrayList<Integer>

考虑一下:

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

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

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


查看完整回答
反对 回复 2021-04-18
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

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

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

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

上面没有用

我想如果声明将是可行的:

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


查看完整回答
反对 回复 2021-04-18
  • 3 回答
  • 0 关注
  • 240 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信