有几种方法可以制作 3-D 数组。
我会避免使用 Object[][],我从不喜欢这种处理或性能。
由于 3-D 数组只是数组的数组,因此一种简单的方法是使用 List 数据结构。
List[] 或 List> 应该可以解决问题。这样,您就拥有 Collection 对象的所有内置功能,此外您还可以在其之上使用 Apache commons、lambdaJ 或 Guava。
如果您不喜欢使用原始数组,那么您也可以制作一个常规的 2-D 数组 [],它可以像 3-D 数组 [][] 一样工作。
这是我围绕一个基本数组制作的简单包装方法,其功能与 3-D 数组相同。
public class MyThreeDArray{
int MAX_ROW;
int MAX_COL;
int[] arr;
public MyThreeDArray(final int MAX_ROW, final int MAX_COL){
this.MAX_ROW = MAX_ROW;
this.MAX_COL = MAX_COL;
arr = new int[MAX_ROW * MAX_COL];
}
private int findIndex(int row, int col) throws IllegalArgumentException{
if(row < 0 && row >= MAX_ROW ){
throw new IllegalArgumentException("Invaild row value");
}
if(col < 0 && col >= MAX_COL ){
throw new IllegalArgumentException("Invaild col value");
}
return ( row * MAX_COL + col );
}
public int get(int row, int col){
return arr[findIndex(row, col)];
}
public void set(int row, int col, int value){
arr[findIndex(row, col)] = value;
}
}
另外请记住,我从未测试过任何这些。
因此,如果您使用字符串执行此操作,则第 0 行可能包含名字值,...而第 4 行可能包含单位值。
要使用此包装器检索人员 A 的数据,可以进行类似于以下的调用:
String firstName = myWrapper.get(0,0);
String lastName = myWrapper.get(0,1);
String phone = myWrapper.get(0,2);
String unit = myWrapper.get(0,3);
而 B 的数据将存储在第二行。
但是为什么要尝试将数组组合在一起呢?你可以很容易地创建一个 POJO 叫人
public class Person{
String firstName;
String lastName;
String phone;
String unit;
public Person(){}
//ToDo: Getters and Setters
}
这种方式可以轻松添加验证并清楚地呼叫特定的人而没有任何麻烦。
Person[] customers = new Person[5];
或者更好
List<Person> customers = new ArrayList<Person>();