Java中的2D动态数组静态数组

时间:2018-03-24 22:29:24

标签: java arrays list matrix arraylist

我有一个2D数组作为NxM大小的输入,其中N是已知的并且是静态的,并且M实际上是动态增长的,并且对于数组的每个索引[0 ... N-1]将是不同的。

我以为我可以这样初始化我的2D数组:

ArrayList<Integer>[] array = new ArrayList[n];

但是这会将所有子数组初始化为null而不是ArrayList实例。 例如,调用

array[0].add(1);

NullPointerException

崩溃

如何正确初始化ArrayLists?

4 个答案:

答案 0 :(得分:3)

您已初始化数组本身,而不是第一个索引处的列表(依此类推......)。

List<Integer>[] array = new ArrayList[n];
array[0] = new ArrayList<>();
array[0].add(1);

无论如何,我建议你避免使用数组结构并选择List<List<Integer>>。或者创建元组类(A Java collection of value pairs? (tuples?)处的更多信息)。

答案 1 :(得分:1)

正如您在the Oracle documentation

看到的那样
  

您无法创建参数化类型的数组。

您可以使用ArrayList<ArrayList<T>>List<List<T>>

答案 2 :(得分:0)

我将如何做到这一点:

        List<ArrayList<Integer>> complex = new ArrayList <ArrayList<Integer>>();
        ArrayList<Integer> simple = new  ArrayList<Integer>();
        simple.add((Integer)5555);
        complex.add(simple);

答案 3 :(得分:0)

#!/usr/bin/env python3
import glob
import xml.etree.ElementTree as ET
filenames = glob.glob("C:\\Users\\####\\Desktop\\BNC2\\[A00-A0B]*.xml")
with open("C:\\Users\\####\\Desktop\\bnc.txt", "w") as outF:
    for filename in filenames:
        with open(filename, 'r', encoding="utf-8") as content:
            tree = ET.parse(content)
            root = tree.getroot()
            for w in root.iter('w'):
                lemma = w.get('hw')
                pos = w.get('pos')
                tag = w.get('c5')

                outF.write(w.text + "," + lemma + "," + pos + "," + tag)
                outF.write("\n")

而不是这样做。 你可以这样做:

ArrayList<Integer>[] array = new ArrayList[n];