Java.use(better);
■ 連想配列への応用
ソースコードに含まれる予約語の度数分布表を作成する事例で話を進めます。
 ̄クラスライブラリーの中から、この問題解決に必要なのは、インターフェース java.util.Map に準拠するクラス群です。そこでは「連想配列」を扱うのに必要なプロトコルが規定されています。その恩恵に浴する前に、連想配列を実現する手法を紹介して、2つの配列を扱うときの問題点を探ります。
実行すると、次の結果が得られ、
components-TreeDemoProject/src/components/TreeDemo.java abstract: 0 catch: 2 char: 0 class: 2 final: 0 for: 4 if: 11 ... void: 7 while: 0 @: 851 [930]
if 文が登場するのは 11 回だと分ります。これまでに紹介した手法を実践すると、その前後で if/for などの数が減少したのを確認できます。
写像〔= mapping〕は、要素対(キーと値)で構成されます。そこで、度数分布表を作成するのに必要な、連想配列を実現するのに、
- 文字列(予約語)を列挙した、キー配列 String[] reservations
- 整数値(度数)を列挙した、値配列 int[] values
の2つの配列を用意しました。そこで、
abstract class Histogram { protected final String[] reservations = { "abstract", "catch", "char", ... "@" };
キー配列 reservations には、初期値に予約語を設定して、
// Java -- 連想配列 class Histogram1 extends Histogram ... int[] values = new int[reservations.length];
値配列 values には、初期値に度数 0 を設定します。
ある予約語の度数を得るには、
int value(String key) { return values[index(key)]; }
メソッド value を利用して、予約語をキー key に指定すると、その度数が得られます。しかし、その前に
private int index(String key) { int index = 0; for (String s: reservations) { if (key.equals(s)) return index; index++; } return index-1; }
補助メソッド index を介して得られる、予約語 key を含む配列のオフセット値が必要です。
 ̄しかし、このように複数の配列を扱っていると、コードが複雑で見通しも悪くなるだけでなく、バグの温床になりがちです。
↑ TOP
》作業中です《update*13/01/23 2:23:44