【问题标题】:2-Dimensional ArrayList Error:java.lang.IndexOutOfBoundsException [duplicate]二维 ArrayList 错误:java.lang.IndexOutOfBoundsException [重复]
【发布时间】:2018-04-11 19:39:03
【问题描述】:

这是我的代码:

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
        ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<ArrayList<Integer>>();
        arrayLists.get(0).add(100);
        arrayLists.get(0).add(50);
        arrayLists.get(1).add(67);
        System.out.println(arrayLists.get(0).get(0));
    }
}

这是错误信息:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at Main.main(Main.java:6)

我不明白这个问题。

【问题讨论】:

  • arrayLists.add(new ArrayList&lt;Integer&gt;()); arrayLists.add(new ArrayList&lt;Integer&gt;()); 异常告诉您您试图在索引 0 处获取列表中的项目,但列表的大小为 0(空)。列表列表 (List&lt;List&gt;) 只是一个空的 List 等待添加 List 实例;:
  • 既然回答正确,副本可以给你一个关于异常本身的完整解释。

标签: java arrays


【解决方案1】:

您创建了ListList,但您从未创建内部List 的实例,所以没有什么可取的,您必须:

ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<ArrayList<Integer>>();
arrayLists.add(new ArrayList<Integer>());
arrayLists.get(0).add(100);
arrayLists.get(0).add(50);

arrayLists.add(new ArrayList<Integer>());
arrayLists.get(1).add(67);

System.out.println(arrayLists.get(0).get(0));   // 100
System.out.println(arrayLists.get(0).get(1));   //  50
System.out.println(arrayLists.get(1).get(0));   //  67

【讨论】:

    【解决方案2】:

    您在ArrayList 中缺少ArrayList。将您的代码更改为

    ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<ArrayList<Integer>>();
    arrayLists.add(new ArrayList<Integer>());
    arrayLists.add(new ArrayList<Integer>());
    

    【讨论】:

      【解决方案3】:

      以上两种解决方案都可以让您了解您的问题,如果您想一次性添加多个 ArrayList,您可以像这样使用ArrayList::addAll

      List<ArrayList<Integer>> arrayLists = new ArrayList<>();
      arrayLists.addAll(Arrays.asList(
              Lists.newArrayList(100, 50),
              Lists.newArrayList(67)
      ));
      

      或者一口气:

      List<ArrayList<Integer>> arrayLists = new ArrayList<>(Arrays.asList(
              Lists.newArrayList(100, 50),
              Lists.newArrayList(67)
      ));
      

      List.newArrayList(..) 来自 Guava。

      【讨论】:

      • 顺便说一下,Lists.newArrayList 来自 Guava。不知道为什么它从来没有被包括在内……很高兴拥有。
      • 这是正确的@AxelH 这很有帮助,也许在 Java 的下一个版本中我们可以看到它:)
      猜你喜欢
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 2017-03-11
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      相关资源
      最近更新 更多