![]()
平成23年 春期 基本情報技術者 午後 問11
問11 Java次の Java プログラムの説明及びプログラムを読んで,設問1,2に答えよ。 〔プログラムの説明〕 クラス ArrayAppendableCharSequence 及び ListAppendableCharSequence は , 追加可能な 0 個以上の文字からなる文字列(文字の並び)を表現するインタフェース AppendableCharSequence を異なるデータ構造で実装したプログラムである。 インタフェース AppendableCharSequence は,パッケージ java.lang のインタフェース CharSequence 及び Appendable で定義されている次のメソッドからなる。 (1) メソッド charAt は,引数 index で指定された位置の文字を返す。文字の位置はインデックス値 で表され,文字列の長さが1以上のとき,最初の文字の位置は0,最後の文字の位置は文字列の 長さ−1で表される。引数で指定されたインデックス値が負又は文字列の長さ以上の場合は, IndexOutOfBoundsException を投げる。 (2) メソッド length は,文字列の長さを返す。 (3) メソッド append は,引数で指定された文字を文字列の末尾に追加する。戻り値として, この AppendableCharSequence のインスタンス自身を返す。 (4) メソッド toString は,このインスタンスの文字列を String オブジェクトで返す。 クラス ArrayAppendableCharSequence は,char 型の配列を用いてインタフェース AppendableCharSequence を実装したものである。メソッド append は,配列の空いている 最初の要素に文字を格納する。配列に空き要素がないときは,要素の個数が現在の配列よりも EXT_SIZE の値だけ大きな配列を生成し,既存の文字データを移し,空いている最初の要素に 文字を格納する。 クラス ListAppendableCharSequence は,連結リスト構造を用いてインタフェース AppendableCharSequence を実装したものである。入れ子クラス ListAppendableCharSequence.Bucket(以下,Bucket という)は ,連絡リストの 要素である。Bucket のインスタンス1個につき,要素の個数が EXL_SIZE である char 型の 配列を用意し,そこに文字データを保持する。Bucket の配列に空き要素がなくなり,次の文字を 追加できないときは,新規に Bucket のインスタンスを生成し,連絡リストに追加する。 クラス Test は,上記二つのクラスそれぞれの実装が異なるメソッド append の実行時間を測定する プログラムである。メソッド measureTime は,引数 n で指定された回数だけ,引数 a で指定された インスタンスのメソッド append を呼び出し,実行時間をミリ秒単位で測定する。 〔プログラム1〕 public interface AppendableCharSequente { public char charAt(int index); public int length(); public AppendableCharSequence append(char c); public String toString(); } 〔プログラム2〕 public class ArrayAppendableCharSequence implements AppendableCharSequence { private static final int EXT_SIZE = 10; private int length; private char[] data; 〔プログラム3〕 public class ListAppendableCharSequence implements AppendableCharSequence { private static final int EXI_SIZE = 10; private Bucket bucketList; private int length; 〔プログラム4〕 public class Test { static final int[] TIMES = { 5000, 10000, 50000, 100000 };
設問1 プログラム中の a に関する解答群
ウ length エ length + EXT_SIZE オ temp.length b に関する解答群
ウ index / EXT_SIZE エ length オ length % EXT_SIZE カ length / EXT_SIZE c に関する解答群
エ offset オ offset + 1 カ offset - 1 d に関する解答群
エ length オ length % EXT_SIZE カ length - len e に関する解答群
イ ArrayAppendableCharSequence ウ ListAppendableCharSequence エ ListAppendableCharSequence.Bucket オ Object カ String
設問2 クラス Test を用いて各クラスのメソッド append の実行時間(ミリ秒)を 測定したところ,表1の結果になった。 ![]() ![]() なお,ほかの変更はないものとする。 (1) 連絡リストの最後の要素を常に参照するためのフィールド last を追加する。 private Bucket last; (2) コンストラクタでフィールド last を初期化する。 public ListAppendableCharSequence() { bucketList = new Bucket(); last = (3) メソッド append でフィールド last を利用する。 public AppendableCharSequence append(char c) { int offset = length % EXT_SIZE; if (offset == 0 && length != 0) { last.next = new Bucket(); last = 解答群
エ last.next オ new Bucket() カ null
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ] |