Not able to understand how to define a List of List in java
本问题已经有最佳答案,请猛点这里访问。
我想了解这两个定义之间的区别,以及为什么正确的定义是正确的,错误的定义是错误的。
显示编译错误的那个
1 | List<List<Integer>> arr2 = new ArrayList<ArrayList<Integer>>(); |
它给我的错误是:
1 2 3 | try2.java:8: error: incompatible types: ArrayList<ArrayList<Integer>> cannot be converted to List<List<Integer>> List<List<Integer>> arr2 = new ArrayList<ArrayList<Integer>>(); |
工作的那个:
1 | List<ArrayList<Integer>> arr = new ArrayList<ArrayList<Integer>>(); |
注:
我明白下面这一条为什么有效:
1 | List<Integer> arr = new ArrayList<Integer>(); |
小精灵:
现在我只想知道> arr2 = new ArrayList
你不需要这些:
1 | List<List<Whatever>> items = new ArrayList<>(); |
完成。
重要的是要理解:你不能创建那些"内部"列表。您只需创建一个列表(其类型为"列表列表")。稍后,您将执行以下操作:
1 2 | List<Whatever> innerItems = new ArrayList<>(); items.add(innerItems); |
例如.原因是:集合不是数组。Java允许您编写创建完全模糊的2维数组的表达式。但是集合没有多维度的概念(实现方面)!
其中一部分是泛型实际上是使用类型擦除实现的。这意味着:实际的列表实现对您在源代码中使用的泛型类型一无所知。它只处理
正如ghostcat建议的那样,您可以使用diamond操作符,让编译器担心正确的类型。
但是,如果要了解正确的类型,请使用:
1 | List<List<Integer>> arr2 = new ArrayList<List<Integer>>(); |
您正在实例化某个东西的
元素类型(我的所谓"something")—您示例中的
现在,当您想要将一个元素添加到您的
1 2 | List<Integer> inner = new ArrayList<Integer>(); arr2.add(inner); |