有几种方法可以创建3D数组。
我会避免使用Object[][], 我从来不喜欢它的处理或性能。
由于3D数组只是数组的数组,一个简单的方法是使用List数据结构。List[]或List>应该可以胜任。这样你就拥有了所有集合对象的内置功能,还可以在其上使用Apache commons、lambdaJ或Guava。
如果你一定要使用原始数组,那么你也可以创建一个常规的2D数组,[],它可以像3D数组,[][]一样运作。
这里是我围绕基本数组制作的简单包装方法,它将与3D数组相同地运行。
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的数据将存储在第二行。
但是为什么要尝试将数组合并在一起呢?您可以轻松地创建一个名为Person的POJO。
public class Person{
String firstName;
String lastName;
String phone;
String unit;
public Person(){}
}
这种方式可以轻松地添加验证并清晰地调用特定的人,而不会遇到任何麻烦。
Person[] customers = new Person[5]
或者更好的是
List<Person> customers = new ArrayList<Person>()