Java Multidimenional ArrayList Int



我将如何访问数组列表中的整数数组,两者都是可调整大小的?

到目前为止,我有这段代码:

List<Integer[]> vertices_passed = new ArrayList<Integer[]>();

我想进入vertices_passed并向 Integer 数组添加一个元素。

像这样:

vertices_passed.get(certain_index).set(index_of_integer_array, Integer.valueof(9))

有没有更好的方法来使用 ArrayLists 创建如下所示的数据结构:

ArrayList {
    [0]
        [0] A
        [1] B
    [1]
        [0] A
        [1] C
        [2] F
        [3] G
    [2]
        [0] D
        [1] C
        [2] F
        [3] G
        [4] H
    [3]
        [0] A
        [0] D
        [0] I

另外 - 我将如何将元素添加到内部数组?

谢谢

你可以

这样做:

package com.sandbox;

import java.util.ArrayList;
import java.util.List;
public class Sandbox {
    public static void main(String[] args) {
        List<Integer[]> dt = new ArrayList<>();
        dt.add(new Integer[2]);
    }
}

但正如评论所提到的,这使用起来非常不方便。 原因是您无法方便地调整数组的大小。 如果要使它们变大或变小,则必须重新创建它们并复制元素。

更好的方法是这样的:

package com.sandbox;

import java.util.ArrayList;
import java.util.List;
public class Sandbox {
    public static void main(String[] args) {
        List<List<Integer>> dt = new ArrayList<>();
        dt.add(new ArrayList<Integer>());
        dt.get(0).add(1);
    }
}

顾名思义,ArrayList由数组支持。 它们是(可能,我没有看过源代码)对你想要完成的确切内容的抽象。 使用它们时,您不必考虑较低级别的详细信息。

您可以使用 a: ArrayList<ArrayList<Integer>>

然后,您可以简单地添加一个元素,例如:

ArrayList<ArrayList<Integer>> structure = new ArrayList<ArrayList<Integer>>();
structure.add(new ArrayList<Integer>());//add empty array
structure.get(index0).add(value));

工作原理:

第一个创建一个 ArrayList,它将存储其他数组列表。

然后我们在第一个数组列表的索引 0 处添加第二个数组列表。

从图形上看,可以像这样看

+---+
|   |
| o |
|   |
+---+

正方形是一个只有一个元素的数组列表,o是一个零个元素的数组列表。

如果您声明structure.get(0)访问大型 ArrayList 的第一个元素,那么从图形上它将返回o 。然后我调用该对象的 add 方法(o )并添加一个值。

所以现在结构看起来像:

+---------+
|         |
| +-----+ |
| |value| |
| +-----+ |
|         |
+---------+

如果我重复该命令,这将导致:

+---------------+
|               |
| +-----+-----+ |
| |value|value| |
| +-----+-----+ |
|               |
+---------------+

代替

vertices_passed.get(certain_index).set(index_of_integer_array, Integer.valueof(9))

vertices_passed.get(certain_index)[index_of_integer_array] = 9;

如果您使用的是非常旧的Java版本,则需要Integer.valueOf(9)new Integer(9),但在过去的几年中不需要那么多。

在设置之前,您必须创建Integer数组并将其放入List中:

int n = ...无论什么。。。 vertices_passed.set(new Integer[n]);

这将起作用:

ArrayList<ArrayList<Integer>> vertices_passed = new ArrayList<ArrayList<Integer>>();
vertices_passed.get(certain_index).set(index_of_integer_array, 9)

不需要做:Integer.valueof(9),只需 9 就可以了,因为 Java 在这里会进行自动转换。

最新更新