3 次元配列を作成するには、いくつかの方法があります。
私は Object[][] を避けますが、処理やパフォーマンスは決して好きではありません。
3 次元配列は単なる配列の配列であるため、List データ構造を使用するのが簡単な方法です。List[] または List> でうまくいくはずです。このようにして、Collection オブジェクトのすべてのビルトインに加えて、その上に Apache commons、lambdaJ、または Guava を追加することもできます。
プリミティブ配列の使用に固執している場合は、3 次元配列 [][] のように機能する通常の 2 次元配列 [] を作成することもできます。
これは、3 次元配列と同じように機能する基本的な配列に対して作成した単純なラッパー メソッドです。
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 さんのデータは 2 行目に格納されます。
しかし、配列を結合しようとするのはなぜでしょうか? 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>();