将列表添加到2D ArrayList中

时间:2014-02-18 10:15:39

标签: java list arraylist casting

如何在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);
        }

    } 

以上代码返回类型不匹配。

3 个答案:

答案 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*的变量,因此编译错误。

继承在此处不会自动生效,除非您在泛型声明中使用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/