スポンサーリンク

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

LINEで送る
Pocket

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

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で大量のデータを扱うことがあろうかと思うのですが、皆さんどうされているのかな。

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


がんと闘う多くの仲間がいます。

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

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


スポンサーリンク

このブログの関連記事

  • 町医者に高性能CTがあった 膵臓がん確定 10:10からCT検査。 紹介された病院は伊藤医院、大森駅をジャーマン坂に沿って蘇峰公園の方に行ったところにあった。木造のいかにも町医者という感じの病院(正確に […]
  • 膵臓がんの長期生存例ってどれだけあるの?膵臓がんの長期生存例ってどれだけあるの? 第4回ZoomWeb交流会は、28名の参加でした。3時間を超えて、熱心にいろいろな話題が飛び交いました。 古くからの方、3日前に膵臓がんを告知されたという方もいて、治療法や […]
  • PanCafe はマギーズ東京のようなものかもPanCafe はマギーズ東京のようなものかも 昨日正午にスタートしたPanCafeですが、半日でメンバーが25人になりました。まあまあ順調なスタートです。目標は全ての膵臓がん患者4万人ですからまだまだ道は遠いです。(サーバー […]
  • マインドフルな人は免疫能力が高いマインドフルな人は免疫能力が高い   「マインドフルネスストレス低減法」については何度か紹介してきたが、この本は、アメリカの企業においてマインドフルネスがどのように定着しているのか […]
  • 抗がん剤を拒否して最期まで将棋 天野貴元さん死去抗がん剤を拒否して最期まで将棋 天野貴元さん死去 今朝の東京新聞のお悔やみ記事に、将棋アマの天野貴元さんが死去されたと報じている。 『がん闘病「次の一手」最期まで 天野貴元さん死去 将棋アマ、30歳』 舌がんの手術後全身 […]
  • 今日は「がん記念日」今日は「がん記念日」 12年前の今日、6月11日は私の「がん記念日」です。 当時、境界型の糖尿病と言われて治療を続けていたところ、体重が減り、血糖値が急激に上昇してきました。 ちょ […]
  • 本庶さん、根拠のない免疫細胞療法に苦言本庶さん、根拠のない免疫細胞療法に苦言 本庶佑さんのノーベル賞受賞を受けて、オプジーボに関する報道も過熱しています。中には、さっそく宣伝に利用している免疫細胞療法のクリニックも登場する始末です。 そうした […]
  • セカンドオピニオンセカンドオピニオン 町田のUクリニックでセカンドオピニオンを受けてきました。 約1時間も時間を取っていただき、じっくりと『私の膵癌に何ができるか』を説明していただきました。一人の患者に対してこ […]
LINEで送る
Pocket

コメントを残す

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