有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我对Java相当陌生,在找到一个结构来执行以下操作时遇到了问题

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

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

我因为“Main.Java使用未经检查或不安全的操作”而受到Java的严厉批评当我尝试添加一个项目时,我得到“java.lang.NullPointerException”

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

我应该如何创建我的结构以使Java满意


共 (3) 个答案

  1. # 1 楼答案

    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为固定长度,但在其他方面应满足您的要求

  2. # 2 楼答案

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

    List<List<String>> listOfStringsArray = new ArrayList<>();
    
    List<String> stringArray = Arrays.asList("String1", "String2");
    
    listOfStringsArray.add(stringArray);
    
  3. # 3 楼答案

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

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

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

    ArrayList[]实际上是一个ArrayList数组,当您new ArrayList[x]时,这意味着创建一个包含ArrayList的x长度数组。每个ArrayList都没有赋值,因此它是一个未初始化的对象,默认情况下,它在许多编译器中是null,但您不能依赖于此

    假设您创建了这个固定长度的数组,其中包含一个可变长度的列表。你要么在数组上做一个循环,说wordList[i] = new ArrayList<String>(),要么在赋值之前做一个空检查,并在每次赋值时创建一个新的ArrayList