JAVAで大量の静的な配列データを扱う
今回はがんとは関係のない内容ですが、参考メモとして。
JAVA初心者が大量のデータ処理に困って・・・・
ある目的でAndroidのアプリを開発しているのですが、大量の静的なデータを扱う必要があり、その処理方法を考えあぐねていました。JAVAの入門書にも、より詳しい応用編にも紹介されていない。インターネットで探してもこれといった適格な説明がないのです。
JAVAのプログラムはClass、つまり部品の設計図あるいは鋳型の集合のようなものですから、大量のデータを扱う配列を一つのClassとして宣言すれば良いのですが、別のClassから利用するには、そのつど実体化=インスタンスする必要があります。それは良いのですが、配列を初期化する、つまり配列に値を入力するのは使う側のClassで行うのです。ということは、この使う側のClassのプログラムが延々と長くなるのです。それを避けたいがために別のClassに配列を宣言したのに、これでは意味がありません。
結論から言うと、次のようにして解決できました。
- 配列をClass(B)に修飾子static、finalを付けて宣言する。
- 同じClass(B)に初期化メソッドを作成し、その中で配列の初期化をする。
- 呼びだす側のメインClass(A)のoncreate()内にてこのメソッドを呼びだせば、アプリの起動時に配列に初期値が代入される。
3次元のfloat型の配列の例では、プログラムはこんな感じになります。
Parameter.java
package com.demo.calc; public class Parameter { public static final float [][][] Sensitivity = new float [10][20][5]; public static void ArrayInit() { // 製品1 Sensitivity[0][1][0] = 0.475f; Sensitivity[0][1][1] = 0.5588f; Sensitivity[0][1][2] = 0.5588f; Sensitivity[0][1][3] = 37.861f; Sensitivity[0][1][4] = -8.7016f; // 製品2 Sensitivity[0][2][0] = 1.7273f; Sensitivity[0][2][1] = 1.7273f; Sensitivity[0][2][2] = 1.7273f; Sensitivity[0][2][3] = 112.59f; Sensitivity[0][2][4] = -2.3346f; // 製品3 Sensitivity[0][3][0] = 2.1111f; Sensitivity[0][3][1] = 2.1111f; Sensitivity[0][3][2] = 2.1111f; Sensitivity[0][3][3] = 233.24f; Sensitivity[0][3][4] = -76.379f; //<・・・略・・・> } }
呼びだして使う側のmain activityには、
package com.demo.calc; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 配列初期化のメソッドを呼びだす。 // クラス名.メソッド名 Parameter.ArrayInit(); //<・・・略・・・> } }
と最初のほうに書いておきます。
以後は、使いたいところで、クラス名.配列名[1][0][3]などのように指定して呼びだせば良いのです。
float Alfa = Parameter.Sensitivity[1][0][3];
- 配列の宣言でstatic、final修飾子を付ける。静的な変数で変更は許可しないという意味になります。
- 初期化するためのmethodにもstatic 修飾子を付ける
これが要点でした。
技術屋さんなどAndroid,JAVAで大量のデータを扱うことがあろうかと思うのですが、皆さんどうされているのかな。
これでアプリは正常に動いているから問題ないと思うが・・・。