配列管理クラスの要素の型・Javaソースコードの書き方

配列管理クラスで要素を管理する仕方について、改めて教えてほしいです。

配列は、同じ型の要素を管理する仕組みです。

要素がString型なら、「String型の要素」だけを配列に追加します。
※特定の型を対応づけるジェネリクスに、String型を指定します。

例えば、配列管理クラスで「String型の要素」だけを管理したら、配列管理クラスの各メソッドを「String型の要素」のために利用できます。

配列管理クラスの要素の型

配列管理クラスの要素の型(クラス)についてです。ここでいう配列管理クラスとは、java.util.ArrayListクラスなどのことです。

配列管理クラスでは、任意の型の要素を管理できることが多いです。

しかし配列は、ただ1種類の型――同じ種類の型――の要素を管理する仕組みだと思います。

配列管理クラスを使用する場合、要素の型は、ただ1種類だけ管理すると良いです。

配列管理クラスで要素の型を1種類だけ管理する場合、次のような良い点があります。

同じ型の要素を取り扱うと理解できます

配列管理クラスの処理において、同じ型の要素を取り扱うと理解できます。
よって同じ型の要素の集合を管理している、と理解できます。

例:
配列管理クラスの処理において、「文字列型の要素だけ取り扱う」と理解できた場合、文字列の集合を管理している、と理解できます。

配列管理クラスは、1種類の型の要素を管理するために、便利なメソッドを用意しています。
この便利なメソッドを再利用できると、プログラム作成の負荷を軽減できます。

同じ型の要素のイメージ

配列管理クラスの要素の型について、図で示します。
配列管理クラスで要素の型が1種類の場合、次のようなイメージだと思います。

例:配列管理クラスの要素が、文字列型の場合。

要素番号01234567……
要素の型文字
列型
文字
列型
文字
列型
文字
列型
文字
列型
文字
列型
文字
列型
文字
列型
文字
列型

水色が、横1列に並んでいるイメージです。

配列管理クラスの例

ここでは配列管理クラスの例として、java.util.ArrayListクラスを使います。

ArrayList クラスでは、任意の型(クラス)の要素を管理できます。

例:ArrayList の add(Object obj) メソッド。
Object型は、Javaの全ての型(クラス)を取り扱える型です。

よって、add(Object obj)メソッドの引数objに、任意の型(例:String型、Integer型など)を指定できます。

※実際のところ、ArryaListに対して、格納する要素の型を指定します。

例:特定の型を対応づけるジェネリクスに、Stringを指定します。

ArrayList<String> stringList = new ArrayList<>();

文字列型の要素だけ取り扱う場合

以上のように任意の型を指定できますが、ArrayListクラスの一つの変数に対して、同じ型の要素だけを追加すると良いです。

例:
ArrayListクラスのstringList変数に対して、add(Object obj)メソッドを使う場合は、文字列型の要素だけを追加します。

stringList.add("文字列その1");
stringList.add("文字列その2");
stringList.add("文字列その3");

次のような理由のためです。

ArrayListクラスの一つの変数において、全体の管理処理を理解しやすくするため。
例:複数個の文字列要素を管理していると、理解しやすくするため。

ArrayListクラスが持つ便利なメソッドを、再利用するため。
例:ArrayListのsize()メソッドについて、文字列型だけの要素の個数を取得するために、再利用するため。

参考:要素の型が2種類の場合

配列管理クラスで要素の型が2種類の場合、次のようなイメージだと思います。

例:配列管理クラスの要素が、文字列型整数型の場合。

要素番号01234567……
要素の型文字
列型
文字
列型
整数
文字
列型
整数
整数
文字
列型
文字
列型
文字
列型

水色緑色が、横1列において混ざっているイメージです。

例えばArrayListクラスの一つの変数で文字列型整数型の要素を管理した場合、次のような都合の悪い点があります。

管理対象が曖昧になります

ArrayListクラスの一つの変数において、全体の管理処理を理解しにくくなります。

ある時は文字列型の要素を管理して、ある時は整数型の要素を管理しているということで、管理対象が曖昧になります。

ArrayListクラスの変数名を、stringListにできません。string(文字列型)以外の要素も、取り扱っているからです。

メソッドを再利用しにくくなります

ArrayListクラスが持つ便利なメソッドを再利用しにくくなります。

ArrayListのsize()メソッドを使って、文字列型だけの要素の個数を取得できないからです。

ArrayListのsize()メソッドでは、「文字列型の要素」と「整数型の要素」を合計した個数を、取得することになります。

なので「要素の個数情報」において、情報の粒度が粗く(大きく)なってしまいます。

配列クラスで「2種類の型の要素」を管理

配列管理クラスを使用する場合、要素の型は「ただ1種類だけ」管理すると良い、と言いました。

それでは、配列管理クラスで「2種類の型の要素」を管理したい場合、どうすると良いでしょうか。

一つの「やり方」に、それら2種類の型の要素を束ねる型(クラス)を使用する方法があります。

束ねる型の例

配列管理クラスで、2種類の型「文字列型整数型の要素」を管理したい場合、それら2種類の型の要素を束ねる項目型(クラス)を使用します。

class Item {
    private String text;
    private Integer value;
    ……
}

配列管理クラスで、要素の型が「2種類の型の要素を束ねる型」の場合、次のようなイメージになると思います。

以下に、配列管理クラスの要素が項目型の場合を図で示します。

要素番号01234……
要素の型Item
  String
  Integer
Item
  String
  Integer
Item
  String
  Integer
Item
  String
  Integer
Item
  String
  Integer
 

項目型が、横1列に並んでいるイメージです。

プログラムの例

ここでは配列管理クラスの例として、java.util.ArrayListクラスを使います。
ArrayListクラスの一つの変数に対して、「項目型の要素だけ」を追加すると良いです。

ArrayListクラスのitemList変数に対して、add(Object obj)メソッドを使う場合は、項目型の要素だけを追加します。

 itemList . add( item1 );
 itemList . add( item2 );
 itemList . add( item3 );

item1変数は、クラスItemの変数です。item2,item3変数も同様です。

※この記事は、2004年7月当時の記事になります。

タイル
配列のイメージ画像
【まとめ記事】アプリの品質を保つため、Javaソースコードを書くための工夫

Javaソースコードを正しく書くための、ちょっとした工夫について、ご紹介しています。 変数の寿命を決める書き方。 肯定的な条件を優先して条件分岐する書き方。 クラス名…