如何在Java中将List添加到2D ArrayList中。我有一些列表,我想将它们添加到2D ArrayList中。我发现用新的List初始化是不可能的。所以我想在Arraylist中添加一个列表。
ArrayList<List<Feature>> featureMatrix= new ArrayList<ArrayList<Feature>>();
for (int i = 0; i < imageNames.size(); i++) {
List<Feature> temp;
for (int j = 0; j < imageNames.get(i).size(); j++) {
System.out.println(train_path + fileNames.get(i) + "/" + imageNames.get(i).get(j));
File img = new File(train_path + fileNames.get(i) + "/" + imageNames.get(i).get(j));
BufferedImage in = ImageIO.read(img);
Extractor e = new Extractor();
temp = e.computeSiftFeatures(in);
System.out.println(temp);
featureMatrix.add(temp);
}
}
以上代码返回类型不匹配。
答案 0 :(得分:3)
这是可能的,但是ArrayList<List<Feature>>
不 ArrayList<ArrayList<Feature>>
,这就是你得到类型不匹配的原因(阅读Java中的泛型协方差)。话虽如此,您的嵌套列表应定义为:
List<List<Feature>> featureMatrix = new ArrayList<List<Feature>>();
答案 1 :(得分:2)
尝试将featureMatrix
声明为:
List<List<Feature>> featureMatrix= new ArrayList<List<Feature>>();
这样您就可以使用通用接口作为声明类型并为其指定具体实现 你仍然可以写:
featureMatrix.add(new ArrayList<Feature>());
因为ArrayList
是List
。
答案 2 :(得分:1)
使用泛型声明变量时,泛型类型必须匹配。
ArrayList<List<Feature>> featureMatrix = new ArrayList<ArrayList<Feature>>();
在这里,您尝试将ArrayList *of ArrayList*
分配给只接受ArrayList *of List*
的变量,因此编译错误。
继承在此处不会自动生效,除非您在泛型声明中使用extends
或super
关键字。
将您的featureMatrix
实例更改为:
List<List<Feature>> featureMatrix = new ArrayList<List<Feature>>();
尽可能使用接口而不是实现将使您的代码更加灵活。将ArrayList of List
分配给List of List
是有效的,因为ArrayList
是List
。
有关仿制药的更多信息,请访问:http://docs.oracle.com/javase/tutorial/java/generics/