2014-02-18 127 views
2

如何将一个List添加到java中的二维ArrayList中?我有一些列表,我想将它们添加到2D ArrayList中。我发现无法用新的List来初始化。所以我正在尝试向Arraylist中添加一个列表。将列表添加到二维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

哪里其他列表中声明? –

+0

我得到了临时列表类型,我想将所有这些临时列表添加到2s列表中。 –

+0

'e.computeSiftFeatures(in)'返回什么? '列表'? –

回答

3

这是可能的,但一个ArrayList<List<Feature>>ArrayList<ArrayList<Feature>>,这就是为什么你的类型不匹配(阅读有关Java泛型协方差)。话虽这么说,你的嵌套列表应该被定义为:

List<List<Feature>> featureMatrix = new ArrayList<List<Feature>>(); 
2

尝试宣告featureMatrix为:

List<List<Feature>> featureMatrix= new ArrayList<List<Feature>>(); 

您使用的是通用的接口声明的类型和分配给它的具体实现这种方式。
您仍然可以写:

featureMatrix.add(new ArrayList<Feature>()); 

因为ArrayList一个List

1

当您使用泛型声明变量时,泛型类型必须匹配。

ArrayList<List<Feature>> featureMatrix = new ArrayList<ArrayList<Feature>>(); 

在这里,你试图给ArrayList *of ArrayList*分配到只接受一个ArrayList *of List*,因此编译错误的变量。

继承不会在这里自动工作,除非在泛型声明中使用关键字extendssuper

featureMatrix实例更改为:

List<List<Feature>> featureMatrix = new ArrayList<List<Feature>>(); 

使用接口在可能的替代实施将会使你的代码更加灵活。将ArrayList of List分配给List of List,因为ArrayListList

更多的仿制药在这里:http://docs.oracle.com/javase/tutorial/java/generics/