現在「Java本格入門」という参考書でJavaを勉強しており、ArrayListとLinkedListの使い分けについてイメージできないことがあります。ArrayListを使う場面は理解できたと思いますが、LinkedListの使う場面についてはイメージができません。
ネットや書籍での使い分けの説明は
要素の追加・削除を大量に行う場合でランダムアクセスを行う可能性が低い場合
プログラム中で発生するデータの入れ物として使われ、時折データベースへ書き出してデータの永続化が図られるような用途
っと書かれていますが、開発経験が乏しいので「プログラム中で発生するデータの入れ物として使われ、時折データベースへ書き出してデータの永続化が図られる」ケースのイメージができません。
要素の追加・削除を大量に行う場合でランダムアクセスを行う可能性が低い場合、
(例えば)プログラム中で発生するデータの入れ物として使われ、時折データベースへ書き出してデータの永続化が図られるような用途。
ということだと思うのですが
出典元に要件やサンプルはなかったのでしょうか
書籍やネットにはArrayListとLinkedListの内部処理の説明や仕組みの説明、どういった基準で使い分けるかは文章で書いてありますが、具体的にどう使い分けるサンプル等はなかったです。
では、「実際に自分でサンプルを作ってみて理解を深める」ということは考えてみましたか?
この手の概念を問う場合、多くのケースで「わかったつもり」以上にはなりません。
どういうときに何を採用するかというのはアンケートに近いですし、要件次第です。もしかしたら好みでも変わるかもしれません。
仕組みがわかればわかると思いますが、LinkedList は容量可変のデータの入れ物です。ArrayList もそこは同じですが、データの追加・削除・編集において得手不得手があります。
例えば大量のデータを追加する場合は ArrayList だと先に追加したデータのコピーが発生するのでパフォーマンスが落ちますが、LinkedList にはそれがありません。大量のデータを削除する場合も LinkedList が有利です。
しかし、保持している大量のデータから任意の位置のデータを見つけるのには ArrayList が有利です。
使う場面を暗記するのではなく、仕組みの理解を優先してください。そうすれば使う場面は自分でわかるはずです。わからないとすれば、それは仕組みを理解していないせいです。
なお、どちらも IList インターフェースを実装しているので、インターフェースを通じてリストにアクセスするよう作れば、実際のパフォーマンスに合わせて取り替えができます。つまり、欲しい機能を実装した後でパフォーマンスに問題があれば取り替えれば済むということです。
皆さんご教授ありがとうございます。
正直、皆さんに甘えていました。すみません。
次からはこういう概念的なものに関しては読むだけで分かったつもりになるだけでなく、
実際にコードを自分で考えて書いてみて、ゆっくり仕組みを理解していこうと思います。
厳しいことを言うようですが、「次からは」と後回しにする人って大抵やりません。
結局どう解決したか何もコメントしないまま店じまいしていませんか?
せっかく指摘されて、頭も回っている今すぐやってみてその結果疑問に思ったことを質問に追記するべきですし、それで理解できて解決できたなら自身で回答をしっかり書いて解決済みにすべきです。
ご自身がベストアンサーに選ばれた回答に提示された記事は「検索してすぐ見つける記事」です。
「ググれ」で納得したということですか?
回答3件
あなたの回答
tips
プレビュー