我将如何访问数组列表中的整数数组,两者都是可调整大小的?
到目前为止,我有这段代码:
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 在这里会进行自动转换。