如何使用List、ArrayList和/和Array在Java中创建二维数组
我对Java相当陌生,在找到一个结构来执行以下操作时遇到了问题
我想要一个固定长度的数组。每个项都是一个包含字符串的可变长度数组(或列表)。所以我试过
ArrayList<String>[] wordList = new ArrayList[maxWordLength];
我因为“Main.Java使用未经检查或不安全的操作”而受到Java的严厉批评当我尝试添加一个项目时,我得到“java.lang.NullPointerException”
wordList[oneWord.length()-1].add(oneWord);
我应该如何创建我的结构以使Java满意
# 1 楼答案
Java不喜欢泛型类型的数组。(请参阅Java教程中的Restrictions on Generics。)相反,请使用列表列表:
这将创建一个初始容量为
maxWordLength
的列表,其中可以包含String
的列表。初始大小(相对于容量)将为0。然后,您可以将单个字符串列表添加到wordList
。为了避免NullPointerException
之后出现问题,您应该用空列表来填充wordList
以:最后,您可以使用以下命令将单词添加到
wordList
中的特定列表中:这不会强制
wordList
为固定长度,但在其他方面应满足您的要求# 2 楼答案
保持简单: 将所有元素作为字符串数组的数组:
# 3 楼答案
List
是ArrayList
和LinkedList
等具体类必须实现的接口ArrayList
是一个List
,它针对顺序读取和添加进行了优化,并由内部数组支持ArrayList<blah>
或List<blah>
是一个List
,其中包含继承blah
的对象(或者如果它是一个接口,则是实现它的对象)ArrayList[]
实际上是一个ArrayList
数组,当您new ArrayList[x]
时,这意味着创建一个包含ArrayList
的x长度数组。每个ArrayList
都没有赋值,因此它是一个未初始化的对象,默认情况下,它在许多编译器中是null
,但您不能依赖于此假设您创建了这个固定长度的数组,其中包含一个可变长度的列表。你要么在数组上做一个循环,说
wordList[i] = new ArrayList<String>()
,要么在赋值之前做一个空检查,并在每次赋值时创建一个新的ArrayList