現在Java Silverの勉強をしています。
白本と黒本を使っており、両者で同じ問題にもかかわらず、答えが違う問題がありました。
出版社の正誤表にもその点が記載されておらず、また解説を見てもどちらも全うなことを言っているので
みなさんに伺いたいと思い投稿しました。
**どちらが正解でしょうか?**あるいは
問題が良くなく、解釈によってはどちらとも正解ととれる問題なのでしょうか?
本題ですが、
その問題とは以下です。
<白本 問題>
ArrayListを使用する利点は以下のどれですか。2つ選択してください。A. メモリ消費を節約できる。
B. コレクションAPIを実装している
C. スレッドセーフである
D. リストの要素数に応じて動的にサイズを変更できる<黒本 問題>
ソフトウェア開発において配列ではなくArrayListを使用すると、どのようなメリットがあるか。2つ選択してください。A. メモリ使用量が少なくなる。
B. コレクションAPIが実装される
C. マルチスレッドセーフになる
D. リストの要素数に応じて動的にサイズが変化する<白本 答え>
A D<黒本 答え>
B D<白本 解説>
Aの理由:配列では、宣言時にあらかじめ要素数を決めておく必要があり、場合によってはメモリ領域を無駄に確保する可能性があります。したがって正解です。Bでない理由:ArrayListはコレクションAPIですが、ArrayListの利点というわけではありません。したがって不正解です。
<黒本 解説>
Aでない理由:ArrayListは、要素のあるなしにかかわらず、バッファ(空き)を持っています。要素を次々と追加していって空きが少なくなると、自動的にバッファを作ります。そのため、要素数をあらかじめ決まっている配列に比べれば、余分にメモリを使ってしまうことになります。したがって不正解です。Bの理由:Javaの標準クラスライブラリには、ArrayListのほかにも配列の代わりにたくさんのインスタンスを管理するための便利なクラスがいくつも用意されています。これらのクラスの利用法を定めたインタフェースも用意されており、インタフェースに定められたAPIを理解していれば、共通した方法でこれらのクラスを扱えるようにもなっています。このようなインタフェース群をひとまとめにして「コレクションAPI」と呼びます。ArrayListは、java.util.ListインタフェースというコレクションAPIを実装したクラスです。したがって正解です。
問題のニュアンスが微妙にちがう可能性もあるので両者の問題を載せました。
私はほぼ同内容だと思っています。
両者とも間違ったことは言っていないので私には判断しかねます。
わかる方がいらっしゃいましたらご意見をいただきたいと思います。
もしくは悪問で解釈のしようによると、どちらも正解といえるといったオチでしょうか。
もしわかるかたがいらっしゃればお願いします。
本の内容を載せることは気が引けますが、私以外の同内容で悩んでいる人の助けになったり、
この問題の改善にも繋がったりすると思い、このような形で投稿させて頂きました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。