在Java中创建二维ArrayList

时间:2018-01-23 01:41:43

标签: java arraylist

我一直在研究一个学校项目,该项目需要(或至少强烈建议)在Java中使用二维ArrayLists(特别是一个包含int s的ArrayList的ArrayList。我发现语法太难掌握,但下面的代码确实难以理解:

List<ArrayList<Integer>> arrList2D = new ArrayList<>();
List<Integer> arrList1D = new ArrayList<>();
arrList1D.add(1);
arrList2D.add(arrList1D);

该片段给出了错误:

Cannot convert List<Integer> to ArrayList<Integer> 

就在最后一行。我觉得令人困惑的是我明确地将arrList1D实例化为ArrayList。我有什么明显的遗失吗?非常感谢任何帮助。对于任何多余的问题,我们深表歉意。

2 个答案:

答案 0 :(得分:2)

List<Integer> arrList1D = new ArrayList<>();

在创建ArrayList类型的新Integer对象时,可以使用List变量来引用Object。就编译器所知,Object arrList1D引用的是List,而不是ArrayList。 ArrayList 扩展列表,这样每个ArrayList都是List,但不是每个List都是ArrayList。当您尝试将List对象添加到仅接受ArrayList对象More on Java Inheritance.

的列表时,会出现此错误

您需要确保arrList1D变量引用ArrayList或“2D列表”的类型为List,而不是ArrayList。

List<List<Integer>> arrList2D = new ArrayList<>();
List<Integer> arrList1D = new ArrayList<>();
arrList1D.add(1);
arrList2D.add(arrList1D);

List<ArrayList<Integer>> arrList2D = new ArrayList<>();
ArrayList<Integer> arrList1D = new ArrayList<>();
arrList1D.add(1);
arrList2D.add(arrList1D);

答案 1 :(得分:0)

所以你看到的错误是因为arrList1D的类型为List,这意味着它可以是任何List实现(尽管你已经选择了ArrayList)。

将arrList2D声明为List<ArrayList<Integer>>的位置此情况下的内部列表必须显式为ArrayList类型。

有两种方法可以使编译将arrList1D的类型更改为ArrayList

    List<ArrayList<Integer>> arrList2D = new ArrayList<>();
    ArrayList<Integer> arrList1D = new ArrayList<>();
    arrList1D.add(1);
    arrList2D.add(arrList1D);

或者更改arrList2D的内部类型以使用List。

    List<List<Integer>> arrList2D = new ArrayList<>();
    List<Integer> arrList1D = new ArrayList<>();
    arrList1D.add(1);
    arrList2D.add(arrList1D);

我建议使用第二个选项,因为它可以让您灵活地自由更改内部或外部List实现。