【问题标题】:How to use List, ArrayList and/and Array to create a 2-dimensional array in Java如何使用 List、ArrayList 和/和 Array 在 Java 中创建二维数组
【发布时间】:2018-08-22 03:04:24
【问题描述】:

我对 Java 还很陌生,在寻找执行以下操作的结构时遇到了问题。

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

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

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

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

我应该如何创建我的结构来让 Java 满意?

【问题讨论】:

  • 那是因为你有一个空数组ArrayLists's。
  • 你正在混合ArrayList和Array,你想要的似乎只是一个数组。可能只是String[] words = new String[maxWordLength]
  • @SomeDude 但这不会给我一个一维数组吗?我需要二维。

标签: java arrays list arraylist


【解决方案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】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      因此,假设您创建了这个包含可变长度列表的固定长度数组。您要么必须对数组进行循环并说wordList[i] = new ArrayList&lt;String&gt;(),要么必须在分配之前进行空值检查并在每个分配上创建一个新的ArrayList

      【讨论】:

        猜你喜欢
        • 2011-02-12
        • 1970-01-01
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 2013-11-22
        • 2011-02-12
        相关资源
        最近更新 更多