如何使用List,ArrayList和/和Array在Java中创建一个二维数组

时间:2018-03-13 18:21:37

标签: java arrays list arraylist

我对Java很新,并且在找到要执行以下操作的结构时遇到问题。

我想要一个固定长度的数组。每个项目都是一个包含字符串的可变长度数组(或列表)。所以我试过......

ArrayList<String>[] wordList = new ArrayList[maxWordLength];

我从Java那里得到了一个耳罩,#34; Main.java使用未经检查或不安全的操作。&#34;当我尝试添加一个项目时,我得到&#34; java.lang.NullPointerException&#34;

wordList[oneWord.length()-1].add(oneWord);

我应该如何创建我的结构以保持Java的快乐?

3 个答案:

答案 0 :(得分:4)

Java不喜欢泛型类型的数组。 (请参阅Java教程中的Restrictions on Generics。)而是使用列表列表:

List<List<String>> wordList = new ArrayList<>(maxWordLength);

这会创建一个初始容量为maxWordLength的列表,其中可以包含String列表。初始大小(与容量相对)将为0.然后,您可以将单个字符串列表添加到wordList。为了避免以后NullPointerException,您应该使用空列表填充wordList以开始:

for (int i = 0; i < maxWordLength; i++) {
    wordList.add(new ArrayList<>());
}

最后,您可以使用以下内容在wordList的特定列表中添加单词:

wordList.get(oneWord.length() - 1).add(oneWord);

这并不强制wordList具有固定长度,但在其他方面应符合您的要求。

答案 1 :(得分:0)

保持简单: 包含所有元素的数组作为字符串的数组:

List<List<String>> listOfStringsArray = new ArrayList<>();

List<String> stringArray = Arrays.asList("String1", "String2");

listOfStringsArray.add(stringArray);

答案 2 :(得分:0)

ListArrayListLinkedList等具体类必须实现的接口。

ArrayList是一个List,针对顺序读取和添加进行了优化,并由内部数组支持。

ArrayList<blah>List<blah>List,其中包含继承blah的对象(或者如果它是接口,则是实现它的对象。)

ArrayList[]实际上是ArrayList的数组new ArrayList[x],这实际上意味着创建一个包含ArrayList s的x长度数组。每个ArrayList都没有分配,所以它是一个未初始化的对象,默认情况下,它在许多编译器中都是null,但你不能依赖它。

因此,假设您创建了包含可变长度列表的固定长度数组。您要么必须对数组进行循环并说出wordList[i] = new ArrayList<String>(),要么在分配之前必须进行空检查,并在每次分配时创建新的ArrayList