スポンサーリンク

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

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


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

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

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


スポンサーリンク

このブログの関連記事

  • 今後の『膵臓がん患者と家族の集い』の開催について今後の『膵臓がん患者と家族の集い』の開催について 『膵臓がん患者と家族の集い』は3月の佐藤典宏先生の講演も中止になり、みなさんからいつ開催できるかとご心配の声をいただいております。 3つの条件が揃うと、新型コロナウ […]
  • ビタミンCビタミンC Linuxの開発者リーナル・トーバルズは、彼の父親がライナス・ポーリングの信奉者だったことから命名されたそうです。ポーリングは個人で二つのノーベル賞(化学賞、平和賞)を受けた数少 […]
  • 期待の膵臓癌治療-ナノナイフ期待の膵臓癌治療-ナノナイフ ナノナイフではステージ4aの膵がんの治療できますが、膵がんの場合は局所にあると思われても、実際には目に見えないがん細胞が広がっている場合が多い。そのために、ナノナイフで局所のがん […]
  • サプリメントは本当に効果はないのか?サプリメントは本当に効果はないのか? 20日に、BLOGOSにサステナブル(持続可能性)ビジネス専門家、田中めぐみ氏の『「サプリメントは効果なし」米医学誌がばっさり』との記事が載りました。(著者サイトはこちら) […]
  • DWIBS(ドゥイブス)法とは?特殊なMRIDWIBS(ドゥイブス)法とは?特殊なMRI 完治させるために抗がん剤を使う 岡田直美医師と善本考香さんの共著『このまま死んでる場合じゃない』では、癌治療の過程では頻繁な検査が不可欠だとして「少し特殊なMRIを受けていただ […]
  • オメガ3脂肪酸と膵癌オメガ3脂肪酸と膵癌 面白いニュースですね。「オメガ3脂肪酸はすい臓がん患者の治療と生活の質(QOL)を向上させる」 オメガ3脂肪酸を、ゲムシタビンと一緒に静注したら生存期間も生活の質( […]
  • 目隠しをしながら火を消すことはできない目隠しをしながら火を消すことはできない コビューの『7つの習慣』だったか、別の本だったか忘れたけども、緊急事態に際して指導者・責任者がまず最初にすべきことは何か。そういう問題が載っていました。 あなたは大 […]
  • 「呪いの言葉」と「善意の謀略」「呪いの言葉」と「善意の謀略」 前沖縄県知事の翁長さんが膵臓がんで亡くなったとき、マスコミや週刊誌に登場した識者や医師などから「手術が死期を早めた。放射線なら助かった」と憶測による無責任は発言がありまし […]
LINEで送る
Pocket

コメントを残す

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