2014-02-18 125 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/