首页 > 解决方案 > 尽管在 java 中正确初始化了 arraylist,但得到一个错误

问题描述

我想在arraylist中传递值,并初始化好。但有一个错误 -

线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:3,大小:0

我正在努力,这是我的代码 -


      public static void main(String[]args)
        {
            int n = 3;
            ArrayList<ArrayList<Integer>> graph = new ArrayList<>(n+2);
            for(int i=0; i < n+2 ; i++) {
                graph.add(new ArrayList<>(n+2));
            }
            graph.get(1).add(3,9);
            graph.get(2).add(3,1);
            graph.get(1).add(2,5);

            int s = 1, d = 3;
            System.out.println(dijkstra(s,d,graph));
        }

标签: javaarraylist

解决方案


您使用capacity =初始化 ArrayLists n + 2,但 ArrayLists 在首次创建时仍然为空。容量与大小不同。

容量
在不分配任何额外内存的情况下可以添加到 ArrayList 的元素数
尺寸
ArrayList 中实际存储的元素个数


您的调用ArrayList::add引发了越界异常,因为空的 ArrayList 无法在 index = 3 处插入值。根据定义,添加到任何 ArrayList 的第一个值的 index = 0。

为什么要尝试在特定索引处插入值?解决方案将取决于您这样做的原因。

编辑:解决方案

创建 ArrayList 时,n + 2使用值 = 0 的条目对其进行初始化。

...
ArrayList<ArrayList<Integer>> graph = new ArrayList<>(n+2);
for(int i=0; i < n+2 ; i++) {
    ArrayList<Integer> sublist = new ArrayList<>(n+2);
    for (int j = 0; j < n + 2; j++) {
        sublist.add(0);
    }
    graph.add(sublist);
}
...

保持其余部分相同,它将按预期运行。


推荐阅读