0

如何访问 Arraylist 中的 Integer Array,两者都可以调整大小?

到目前为止我有这个代码:

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

我想进入vertices_passedInteger 数组并添加一个元素。

像这样的东西:

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

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

谢谢

4

4 回答 4

2

可以这样做:

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,顾名思义,由数组支持。它们是(可能,我没有查看源代码)对您想要完成的内容的抽象。当您使用它们时,您不必考虑较低级别的细节。

于 2013-09-16T22:15:09.510 回答
1

你可以使用: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 |
|   |
+---+

正方形是具有一个元素的 ArrayList 和o具有零元素的 arrayList。

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

所以现在结构看起来像:

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

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

+---------------+
|               |
| +-----+-----+ |
| |value|value| |
| +-----+-----+ |
|               |
+---------------+
于 2013-09-16T22:15:12.233 回答
0

代替

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]);

于 2013-09-16T22:14:59.070 回答
0

这将起作用:

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在这里做了自动转换。

于 2013-09-16T22:16:29.607 回答