I never figure out the correct way to create an 2D ArrayList
1 2 3 | List<ArrayList<Planet>> NAME = new ArrayList<ArrayList<Planet>>(N); List<List<Planet>> NAME = new ArrayList<ArrayList<Planet>>(N); ArrayList<ArrayList<Planet>> NAME = new ArrayList<ArrayList<Planet>>(N); |
我不知道这三种表达有什么不同。我后来意识到,列表可能是用于声明的,因为它是一个接口,而
found : java.util.ArrayList>
required: java.util.ArrayList>
List > Name = new ArrayList
>(N);
我在标题处添加了。
1 2 | import java.util.ArrayList; import java.util.List; |
在另一个地方,当我将
1 2 3 4 5 6 | for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (i == j) continue; NAME[i].add(planets[j]); } } |
编译器报告,
array required, but java.util.ArrayList> found
1 planetsForNetForceSetting[i].add(planets[j]);
有人能告诉我原因吗?
您试图从
要从
那么,你的方法必须是
1 2 3 4 5 6 | for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (i == j) continue; NAME.get(i).add(planets[j]); } } |
关于三个表达式的区别,以及为什么使用接口来声明
第一个EDOCX1×20是由EDCOX1型21参数表示的Java接口。
然后是以下几行:
1 | List<ArrayList<Planet>> planetsList = new ArrayList<ArrayList<Planet>>(); |
创建类型为
1 | List<List<Planet>> planetsList2 = new ArrayList<ArrayList<Planet>>(); |
不会编译,因为您不能将EDCOX1的30个引用分配给EDCOX1(32)。这是一个更深入的解释,为什么在Java中你不能有一个"列表<列表>字符串>"?
1 | ArrayList<ArrayList<Planet>> planetsList3 = new ArrayList<ArrayList<Planet>>(); |
将创建类型为
您需要同时导入
最后。不能通过数组索引语法
在您的3个表达式中,按照您提到的顺序,第二个表达式是最通用的表达式,然后是第一个表达式,然后是第三个表达式。这意味着当您使用
更通用的类型和首选类型是使用
对于您的编译问题,您的代码不足以找出根本原因,因为我看不到
希望这有帮助!!!!