イントロダクション
プログラムを作成する上で、沢山のデータを扱うことがあります。例えば、日本の統計局で作成した人口統計などをダウンロードしてきて、そのファイル(CSVファイルといいます)からデータを取得して何かしらの処理を行う。。。
このときに取得したデータを変数にセット(代入)する必要がありますが、このときに使用する変数の型が「配列」というわけです。
配列の種類と宣言
- int型の配列: int[] intArr;
- double型の配列: double[] doubleArr;
- String型の配列: String[] strArr;
上記のように各データ型の後に「[]」をつけた形で宣言してやれば配列として宣言したことになります。
配列の使い方
今回は、配列について記載します。配列とは変数の集まりです。自分のイメージは「ダンボール」です。
配列とは
イメージ的な話をしても仕方ないのですが、目に見えないものなのでイメージを「自分なりに」明確にする必要があります。
データ型は以前示したように、int型、double型などプリミティブ型でも、参照型でも配列として扱うことができます。
//// プリミティブ型 //// // int型の配列 int[] num = new int[] {0, 1, 2, 3]; // double型の配列 double[] dob = new double[] {1.0, 2.2, 0.1}; //// 参照型 //// String[] strs = new String[] {"aa", "bbb", "vcv"}; OriginalClass[] cls = new OriginalClass[] {new OriginalClass(), new OriginalClass()};
Eclipseで初期化したものは下のように表示されました。と言うかビルドエラーが出ませんと言うことが言いたいだけの画像です。
とりあえずコードを書いてみました。
何に使うの?
ズバリ、情報処理の部分で使用します。具体的にはDBから取得したデータ、WebAPIで取得したデータなど(JSONの配列になっていることが多いです)、オープンデータなどがあります。
ちょっと、ダウンロードしてみたので、それを一部記載します。ダウンロードしたのは「オープンデータ取組済自治体一覧」です。
ちなみに、コマンドでオープンデータが取得できます。
団体コード,団体名,サイトのURL1,サイトのURL2,サイトのURL3,追加日,更新日 010006,北海道,http://www.pref.hokkaido.lg.jp/ss/jsk/opendata/opendata.htm,https://www.harp.lg.jp/opendata/,,, 020001,青森県,https://opendata.pref.aomori.lg.jp/,,,,2019.03.11 030007,岩手県,https://www.pref.iwate.jp/kensei/seisaku/jouhouka/1012070/index.html,,,, 040002,宮城県,http://www.pref.miyagi.jp/site/opendata-miyagi/,,,, 050008,秋田県,https://www.pref.akita.lg.jp/pages/archive/32419,,,,
このCSVデータというのは、「カンマ区切りの可変長データ」で行の一番初めの部分「団体コード,団体名,サイトのURL1,サイトのURL2,サイトのURL3,追加日,更新日」と記載している部分がヘッダー(見出し)にあたります。
みやすくすると以下のようになります。
団体コード | 団体名 | サイトのURL1 | サイトのURL2 | サイトのURL3 | 追加日 | 更新日 |
010006 | 北海道 | http://www.pref.hokkaido.lg.jp/ss/jsk/opendata/opendata.htm,https://www.harp.lg.jp/opendata/ |
上記のように、みることができます。そしてプログラムではこのようなデータをCSVと呼び、カンマ区切り、タブ区切りのデータとして通信したり、オープンデータのようにダウンロードできたりします。
配列の注意点
配列はデータとして扱うことが多いので、データの出し入れをやることが(実装として)多いです。ですが、データを取り出そうとした時に1番目、2番目。。。と考えていると間違えます。下のサンプルコードを見てください。
String[] lv1Array = new String[] {"a", "b", "c"};
上のコードは"a"を取得しようとするときはlv1Array [0]
のように実装する必要があります。lv1Array[1]
とすると"b"が取得されてしまいます。つまりは
配列は0番目から始まります。
とりあえずは「そんなもんだ」と理解しておいてください。
このようなデータを解析したり、統計学したりするのが最近の流行りのようですが、そんなことよりも早く「テキストRPG」を完成させたいという欲求が自分にはあります(笑)。
本当のことを言うと「統計学」がわからないので現状では作業がストップしている状況です。ただいま勉強中。。。
配列を使ったサンプルコード
Gitにアップしているのでこちらはダウンロードできます。そして、下のコードはGitのコードになります。
public static void main(String[] args) { // 1次元配列 String[] lv1Array = new String[] {"a", "b", "c"}; // 2次元配列 String[][] lv2Array = new String[][] {{"a", "b", "c"}, {"d", "e", "f"}}; // 3次元配列 String[][][] lv3Array = new String[][][] { {{"a", "b", "c"}, {"d", "e", "f"}} ,{{"g", "h", "i"}, {"j", "k", "l"}} ,{{"m", "n", "o"}, {"p", "q", "r"}} }; // 1次元配列を表示する System.out.println("*** 1次元配列を表示 ***"); for (String nakami : lv1Array) { printf("", nakami); } // 2次元配列 System.out.println("\n*** 2次元配列を表示 ***"); for (String[] nakamiLv2 : lv2Array) { for (String nakami : nakamiLv2) { printf("", nakami); } } // 3次元配列 System.out.println("\n*** 3次元配列を表示 ***"); for (String[][] nakamiLv3 :lv3Array) { for (String[] nakamiLv2 : nakamiLv3) { for (String nakami : nakamiLv2) { printf("", nakami); } } } }
結局は、配列と言ってもデータを1つに変数にまとめるための機構なんだと思ってもらっても結構なです。
そして、StringクラスなどにはtoArray()
メソッドがあり、配列として扱うためのAPIが揃っているので配列を理解しておくと便利です。
StringクラスはtoCharArray()で、Char型の配列を返します。
追伸
上のCSVデータですが。これは初めに文字列で受け取ります。それを配列に変換してやれば、データの1つ1つを扱えます。いかにサンプルコードを示します。
String csvData = "010006,北海道,http://www.pref.hokkaido.lg.jp/ss/jsk/opendata/opendata.htm,https://www.harp.lg.jp/opendata/,,,\r\n020001,青森県,https://opendata.pref.aomori.lg.jp/,,,,2019.03.11"; String[] csv = csvData.split(","); // 拡張for文 for (String data : csv) { System.out.pritln(data); }
余談ですが
java.util.ArrayList
このクラスは、可変長配列を実装しているクラスで「リスト」と名前がついていますが、配列です。JavaDocにも記載があります。
とりあえずは、配列が使えると「データサイエンス」にも手が出るかも?と言うことです。もちろんデータ処理にも使います。
でわでわ。。。
<配列の使い方>
<配列を使って見た(余計な音が入っています)>
## やってみよう
配列を宣言してみましょう。そして、配列の中身を参照して見ましょう。
### 例題
1. int型の配列「intArr」を宣言してください。
2. char型の配列「chArr」を次のコードで初期化してください。「{'a', 'b', 'c', 'd'}」
char型は「'(シングルクォーテーション)」で囲みます。String型は「"(ダブルクォーテーション)」なので間違えないようにしましょう。
3. 変数「chArr」の配列0番目と1番目をコンソール(標準出力)に出力してください。
```java
public class Hajimete7 {
public static void main(String[] args) {
int[] intArr;
char[] chArr = {'a', 'b', 'c', 'd'};
System.out.println(chArr[0]);
System.out.println(chArr[1]);
}
}
```
### 問題
1. double型の配列「doubleArr」を宣言してください。
2. String型の配列「strArr」を次のコードで初期化してください。「{'a', 'b', 'c', 'd'}」
3. 変数「strArr」の配列0番目と1番目をコンソール(標準出力)に出力してください。
<<< [前回](http://zenryokuservice.com/wp/2019/09/09/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a66-%e3%80%9c%e5%a4%89%e6%95%b0%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%ef%bc%92%e3%80%81byte-char-boolean%e5%9e%8b%e3%80%9c/) [次回](http://zenryokuservice.com/wp/2019/09/11/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a68-%e3%80%9cboolean%e3%81%a8if/) >>>
関連ページ
関連ページ
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Eclipse SceneBuilderを追加する
- JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
Java Basic一覧
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜