24444
Java Silver arrayListの利点問題の矛盾について

現在2冊の問題集で1Z0-808の試験対策を行っております。  
①徹底攻略 SE7 1Z0-803(黒本) 初版 2014/06/21  
②スピードマスター問題集 SE8 1Z0-808(白本) 初版 2016/03/01

SE7対策を行っておりましたがSE8を受験するのでこの構成となりました。

疑問点は問題の回答が双方で異なることです。下記に問題と回答を記述します。  
①9-17  
■問題  
ソフトウェア開発において配列ではなく、ArrayListを使用するとどのようなメリットがあるか  
■選択肢  
A.コレクションAPIが実装される  
B.マルチスレッドセーフになる  
C.メモリ使用量が少なくなる  
D.リストの要素数に応じて動的にサイズが変化する  
■回答  
A. ○ (APIを理解していれば他の便利なクラスライブリを扱える)  
B. × (マルチスレッドセーフにならない)  
C. × (要素があらかじめ決まっている配列に比べて余分にメモリを必要とする)  
D. ○ (設問の通り)

②9-11  
■問題  
ArrayListを使用する利点はどれか  
■選択肢  
A.メモリ消費を節約できる  
B.コレクションAPIを実装している  
C.スレッドセーフである  
D.リストの要素数に応じて動的にサイズを変更できる  
■回答  
A. ○ (配列に比べて動的にサイズを変更できる為メモリ消費を節約できる)  
B. × (ArrayListの利点と言うわけではない)  
C. × (スレッドセーフとは限らない)  
D. ○ (設問の通り)

疑問点は回答Aの方です。  
黒本と白本で回答が違うのでよく分からなくなってきました。  
受けるのは1Z0-808ですし、本の発行から数年経っているので  
後者で覚えようと思うのですがいかかがでしょうか。
CC BY-SA 3.0
2016-04-28T05:46:37.270
24416
2016-05-31T04:43:58.867
13969
question
java oracle
1Z0-808 ArrayListを利用する利点問題の矛盾について
①9-17の

> ソフトウェア開発において配列ではなく、ArrayListを使用するとどのようなメリットがあるか  
>  C.メモリ使用量が少なくなる  
>  C. × (要素があらかじめ決まっている配列に比べて余分にメモリを必要とする)

内部的な処理でいうとArrayListはサイズが決まっていない場合はデフォルトで１０のサイズを確保していたりするし、後からかってに1.5倍づつ増やしている反面、サイズの決まった配列と比べると、インスタンスの"メモリ使用量"が違いますよー。ってことですかね。

②9-11の

> ArrayListを使用する利点はどれか  
>  A.メモリ消費を節約できる  
>  A. ○ (配列に比べて動的にサイズを変更できる為メモリ消費を節約できる)

というのはArrayListの場合、自動でサイズを増やせるため、ArrayListのインスタンスは１つで済みますが、配列の場合は、サイズを増やす処理を行いたい場合は、サイズを増やした配列のインスタンスを新たに作成する必要があるため、インスタンスが増えますよー。インスタンスが増えるから、"メモリ消費"はArrayListの方が節約できますよー。かもしれません。

設問で聞いていることはそれぞれ、「メモリ使用量」と「メモリ消費」に関してなので、そんなんじゃないかなー。と思いました。
CC BY-SA 3.0
2016-04-28T12:43:33.220
24426
2016-04-28T12:54:41.093
2016-04-28T12:54:41.093
15308
15308
24416
answer
①9-17の

> ソフトウェア開発において配列ではなく、ArrayListを使用するとどのようなメリットがあるか  
>  A.コレクションAPIが実装される  
>  A. ○ (APIを理解していれば他の便利なクラスライブリを扱える)

というのが、ソフトウェア開発において、障害対応や要件変更など、後から修正が容易に可能であることに加え、コレクションAPIの実装を意識してコーティングすることによって、やりたいことが容易に実現できますよー。  
っていうメリットがあるように思います。

②9-11の

> ArrayListを使用する利点はどれか  
>  B.コレクションAPIを実装している  
>  B. × (ArrayListの利点と言うわけではない)

ArrayListを単体で見たときの利点てなんなのー？っていうとコレクションAPIを意識してコーディングしなくてもよいので、別に利点ではないのかなーと。

ただまあ、コレクションAPIを実装していることはユーザが意図していなくてもどんなシーンにおいてもメリットであると思うので、9-11の解説の方が個人的にはええええっアホなん？？？。って思います。
CC BY-SA 3.0
2016-04-28T13:36:25.497
24429
2016-04-28T13:56:10.167
2016-04-28T13:56:10.167
15308
15308
24416
answer
設問が微妙に異なります。

黒本は配列とArrayListの比較を、白本はArrayListの一般的な特長を問うています。

同じ数の要素を収めるなら (この前提が設問から読み取りづらい) ArrayListは配列よりメモリを要するので「メモリの使用量が少なくなる」は×です。

任意の要素数に対応するプログラムでは (白本の設問意図と思われます)
ArrayListならそのとき必要なだけのメモリを要するので配列よりも効率の上で有利だ、ということでしょう。
CC BY-SA 3.0
2016-04-29T03:45:21.047
24436
2016-04-29T03:45:21.047
15325
24416
answer
# ArrayList メモリ消費量について

(これと同じような問題がそのまま設問として実際の試験で出題されるんですかね。。文脈がごそっとない悪問ような気がしますが。。)

  * 配列の方がメモリを多く使うケース: あらかじめ理論的な最大有効要素数だけ配列を用意しなければならず、実際にそこまで利用されなかった場合に無駄である。前提として「メモリ領域として何かしらのデータを蓄えておいて、そのうちで有効な要素の総数が増減する」ケースで、「同じインスタンスを使い回す」ケース場合について述べています。

  * ArrayList の方がメモリを多く使うケース: 利用する要素数が固定の場合に、配列と ArrayList を比べた場合には、動的なサイズ変更を可能にするためのメタ情報的なオーバーヘッドが生じているので、配列に比べてメモリを多く使用する。

実際には、固定要素数を扱う場合でも、配列とArrayList
の間で生じるメモリ消費量の差より、もっと先にチューニングするべき場所が（本当に)いくらでもあると思うので、 ArrayList
を常に使っておけばいいとは思いますが。。
CC BY-SA 3.0
2016-04-29T07:42:08.030
24444
2016-04-29T07:42:08.030
754
24416
answer