你似乎认为你有一个存储为
ArrayList
的数字2D矩阵,但事实并非如此。相反,你有一个2D矩阵,其中每个元素都是
ArrayList
。这意味着你的代码中实际上有3个维度。我认为这不是你想要的。有几种方法可以使用你已经拥有的结构(即不使用任何外部库)来实现二维。
一个由数字组成的二维数组
数组是一个易于理解的结构,所以让我们从那里开始。
Number[][] table = new Number[10][10];
table[0][0] = 0;
table[0][1] = 10;
table[1][0] = 20;
table[1][1] = 30;
System.out.println("Value="+table[1][0].get());
这段代码声明了一个类型为Number
的二维数组,然后用10行10列进行初始化。它部分填充了数字。只要访问已经初始化的元素,就不会有问题。尝试访问尚未初始化的元素(如table[3][4]
)将是错误的。
初始化数组的另一种方法
Number[][] table = { { 0, 10 }, { 20, 30 } };
System.out.println("Value=" + table[1][0]);
这与之前的相同,但一次性初始化。这个特定的数组只有2行2列。
嵌套的ArrayLists
如果你想使用一个ArrayList代替数组,那没问题。你只需要意识到ArrayList实际上会包含其他ArrayList,每个ArrayList都包含Numbers。就像这样:
ArrayList<ArrayList<Number>> table = new ArrayList<>();
table.add(new ArrayList<>());
table.add(new ArrayList<>());
table.get(0).add(0);
table.get(0).add(10);
table.get(1).add(20);
table.get(1).add(30);
System.out.println("Value=" + table.get(1).get(0));
在这个例子中,你首先声明一个包含包含数字的ArrayList的ArrayList,并初始化外部ArrayList。然后创建一些内部ArrayList,最后为每个内部ArrayList分配一些数字。
总结:
您可以根据自己的喜好使用数组或ArrayList。在访问它们的元素之前,您只需要正确地初始化它们即可。如何初始化取决于您选择的数据结构。
所有代码:
import java.util.ArrayList;
public class TwoD {
public void example1() {
Number[][] table = new Number[10][10];
table[0][0] = 0;
table[0][1] = 10;
table[1][0] = 20;
table[1][1] = 30;
System.out.println("\nExample 1");
System.out.println("Value=" + table[1][0]);
}
public void example2() {
Number[][] table = { { 0, 10 }, { 20, 30 } };
System.out.println("\nExample 2");
System.out.println("Value=" + table[1][0]);
}
public void example3() {
ArrayList<ArrayList<Number>> table = new ArrayList<>();
table.add(new ArrayList<>());
table.add(new ArrayList<>());
table.get(0).add(0);
table.get(0).add(10);
table.get(1).add(20);
table.get(1).add(30);
System.out.println("\nExample 3");
System.out.println("Value=" + table.get(1).get(0));
}
public static void main(String[] args) {
TwoD me = new TwoD();
me.example1();
me.example2();
me.example3();
}
}
table[0][1].add(10)
没有出现错误吗?考虑到它还没有被初始化,那就很奇怪了。 - RealSkepticget()
方法存在问题。 - Suresh Atta