HOME»基本情報技術者平成23年特別問題»午後問11
基本情報技術者過去問題 平成23年特別 午後問11
⇄問題文と設問を画面2分割で開く⇱問題PDF問11 ソフトウェア開発(Java)
次のJava プログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕
クラス ArrayAppendableCharSequence 及び ListAppendableCharSequence は,追加可能な0個以上の文字からなる文字列(文字の並び)を表現するインタフェース AppendableCharSequence を異なるデータ構造で実装したプログラムである。
インタフェース AppendableCharSequence は,パッケージ java.lang のインタフェース CharSequence 及び Appendable で定義されている次のメソッドからなる。
クラス ListAppendableCharSequence は,連結リスト構造を用いてインタフェース AppendableCharSequence を実装したものである。入れ子クラス ListAppendableCharSequence.Bucket(以下,Bucket という)は ,連絡リストの要素である。Bucket のインスタンス1個につき,要素の個数が EXL_SIZE であるchar型の配列を用意し,そこに文字データを保持する。Bucketの配列に空き要素がなくなり,次の文字を追加できないときは,新規に Bucket のインスタンスを生成し,連絡リストに追加する。
クラス Test は,上記二つのクラスそれぞれの実装が異なるメソッド append の実行時間を測定するプログラムである。メソッド measureTime は,引数 n で指定された回数だけ,引数 a で指定された インスタンスのメソッド append を呼び出し,実行時間をミリ秒単位で測定する。
〔プログラムの説明〕
クラス ArrayAppendableCharSequence 及び ListAppendableCharSequence は,追加可能な0個以上の文字からなる文字列(文字の並び)を表現するインタフェース AppendableCharSequence を異なるデータ構造で実装したプログラムである。
インタフェース AppendableCharSequence は,パッケージ java.lang のインタフェース CharSequence 及び Appendable で定義されている次のメソッドからなる。
- メソッド charAt は,引数 index で指定された位置の文字を返す。文字の位置はインデックス値で表され,文字列の長さが1以上のとき,最初の文字の位置は0,最後の文字の位置は文字列の長さ-1で表される。引数で指定されたインデックス値が負又は文字列の長さ以上の場合は,IndexOutOfBoundsException を投げる。
- メソッド length は,文字列の長さを返す。
- メソッド append は,引数で指定された文字を文字列の末尾に追加する。戻り値として,この AppendableCharSequence のインスタンス自身を返す。
- メソッド toString は,このインスタンスの文字列を String オブジェクトで返す。
クラス ListAppendableCharSequence は,連結リスト構造を用いてインタフェース AppendableCharSequence を実装したものである。入れ子クラス ListAppendableCharSequence.Bucket(以下,Bucket という)は ,連絡リストの要素である。Bucket のインスタンス1個につき,要素の個数が EXL_SIZE であるchar型の配列を用意し,そこに文字データを保持する。Bucketの配列に空き要素がなくなり,次の文字を追加できないときは,新規に Bucket のインスタンスを生成し,連絡リストに追加する。
クラス Test は,上記二つのクラスそれぞれの実装が異なるメソッド append の実行時間を測定するプログラムである。メソッド measureTime は,引数 n で指定された回数だけ,引数 a で指定された インスタンスのメソッド append を呼び出し,実行時間をミリ秒単位で測定する。
設問1
プログラム中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群
- data.length + length
- data.length + temp.length
- length
- length + EXT_SIZE
- temp.length
b に関する解答群
- index
- index % EXT_SIZE
- index / EXT_SIZE
- length
- length % EXT_SIZE
- length / EXT_SIZE
c に関する解答群
- length
- length + 1
- length - 1
- offset
- offset + 1
- offset - 1
d に関する解答群
- len
- len % EXT_SIZE
- len - length
- length
- length % EXT_SIZE
- length - len
e に関する解答群
- AppendableCharSequence
- ArrayAppendableCharSequence
- ListAppendableCharSequence
- ListAppendableCharSequence.Bucket
- Object
- String
解答選択欄
- a:
- b:
- c:
- d:
- e:
解答
- a=ウ
- b=イ
- c=ウ
- d=カ
- e=ア
解説
この設問の解説はまだありません。
設問2
クラスTestを用いて各クラスのメソッド append の実行時間(ミリ秒)を測定したところ,表1の結果になった。文字の追加回数が多くなるにつれて ListAppendableCharSequence の方が遅くなるのは,連絡リストをたどる回数が増えるためであると推測される。そこで,ListAppendableCharSequence.append の性能を改善するために,次の修正を行った。 に入れる正しい答えを,解答群の中から選べ。
なお,ほかの変更はないものとする。
なお,ほかの変更はないものとする。
- 連絡リストの最後の要素を常に参照するためのフィールド last を追加する。
- コンストラクタでフィールド last を初期化する。
- メソッド append でフィールド last を利用する。
f,g に関する解答群
- bucketList
- bucketList.next
- last
- last.next
- new Bucket()
- null
解答選択欄
- f:
- g:
解答
- f=ア
- g=エ
解説
この設問の解説はまだありません。