JAVAで大量の静的な配列データを扱う

今回はがんとは関係のない内容ですが、参考メモとして。

JAVA初心者が大量のデータ処理に困って・・・・

ある目的でAndroidのアプリを開発しているのですが、大量の静的なデータを扱う必要があり、その処理方法を考えあぐねていました。JAVAの入門書にも、より詳しい応用編にも紹介されていない。インターネットで探してもこれといった適格な説明がないのです。

JAVAのプログラムはClass、つまり部品の設計図あるいは鋳型の集合のようなものですから、大量のデータを扱う配列を一つのClassとして宣言すれば良いのですが、別のClassから利用するには、そのつど実体化=インスタンスする必要があります。それは良いのですが、配列を初期化する、つまり配列に値を入力するのは使う側のClassで行うのです。ということは、この使う側のClassのプログラムが延々と長くなるのです。それを避けたいがために別のClassに配列を宣言したのに、これでは意味がありません。

結論から言うと、次のようにして解決できました。

  1. 配列をClass(B)に修飾子static、finalを付けて宣言する。
  2. 同じClass(B)に初期化メソッドを作成し、その中で配列の初期化をする。
  3. 呼びだす側のメイン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で大量のデータを扱うことがあろうかと思うのですが、皆さんどうされているのかな。

これでアプリは正常に動いているから問題ないと思うが・・・。


膵臓がんと闘う多くの仲間がいます。応援のクリックをお願いします。

にほんブログ村 病気ブログ 膵臓がんへ
にほんブログ村

にほんブログ村 病気ブログ がんへ
にほんブログ村


スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です