java我从来没有找到创建2D ArrayList的正确方法
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);
我说不出这三种表达方式有什么不同。我后来意识到,可能List是用于声明的,因为它是一个接口,而ArrayList
可以用于初始化,因为它是一个类。我在我的项目中采用了第一种语法并找到了
found : java.util.ArrayList>
required: java.util.ArrayList>
List<List<Planet>> Name = new ArrayList<ArrayList<Planet>>(N);
我在页眉处加了一个
import java.util.ArrayList;
import java.util.List;
在另一个地方,当我将Planet
对象添加到ArrayList
中时:
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
planetsForNetForceSetting[i].add(planets[j]);
有人能告诉我为什么吗
# 1 楼答案
第一个}的具体实现。因此,您可以通过这种方式分配
List<T>
是一个java接口,由类型T
参数化ArrayList<T>
是接口{List<Integer> list = new ArrayList<Integer>();
,变量list
将具有类型List<Integer>
,它将隐藏特定的实现ArrayList<T>
然后是以下几行:
创建类型为
List<ArrayList<Planet>>
的变量planetsList
,它是数组列表的列表。其中,实际的外部列表实现是ArrayList<ArrayList<Planet>>
将不会编译,因为您无法将
ArrayList<ArrayList<Planet>>
分配给List<List<Planet>>
。请参阅这个问题,以更深入地解释为什么Why can't you have a "List<List<String>>" in Java?将创建类型为
ArrayList<ArrayList<Planet>>
的变量planetsList3
您需要同时导入
java.util.List
和java.util.ArrayList
类型,因为您在代码中直接引用它们最后。不能通过数组索引语法
items[index]=item;
将项分配给列表的索引,因为List<ItemType> items;
是一个接口而不是数组。这些在java中是完全不同的# 2 楼答案
您正试图从
List
的给定位置检索数据,就像Array
这里:NAME[i].add(planets[j]);
,什么是不能做的要从^{} 获取数据,必须使用^{} 方法。这样:
NAME.get(i)
而不是NAME[i]
那么,你的方法必须是
关于三个表达式的区别,以及为什么使用接口来声明
List<Object> list = new ArrayList<Object>
而不是类本身look at this question# 3 楼答案
在你的三个表达中,按照你提到的顺序,第二个是最通用的,然后是第一个,然后是第三个
这意味着当您使用
List<Planet> listObj
时,您可以使用listObj
指向List
接口的任何实现。当您执行ArrayList<Planet> listObj
时,您可以使用listObj
只指向类型为ArrayList
的对象 无论是一维还是N维,这都是正确的
一种更通用且更可取的类型是使用
List<Object> listObj
,这意味着您可以使用listObj
指向List
接口的任何实现,也可以在列表中放置任何对象。使用List<Planet> listObj
时,只能放置Planet
对象对于编译问题,您的代码不足以找出根本原因,因为我看不到什么
planetsForNetForceSetting
,但请确保将正确的对象放在正确的位置。就像我上面解释的希望这有帮助