- ベストアンサー
String[] とVectorの使い分け
失礼いたします。 きっとこの質問は大勢の方が持っているのではないかと思い質問します。 自分はDBを利用した業務系のwebアプリ開発を行っているのですが、 DB情報の取得の際、その情報を何に格納するかで疑問が生じました。 例えば会社情報を検索したとして、各会社の情報はそれぞれ1つのインスタンスに持たせます。 これは会社数だけ繰り返されます。 そこで、そのインスタンスを順次何に入れるかなのですが、 型を持ったインスタンスの配列にするケースとVectorに入れるケースと両方見たことがあります。 きっと他にも方法は多種あるでしょう。 ではここで、配列(この場合インスタンスの配列)とVector、ArrayやListの使い方、またMapとCollectionなどの違いはどのように 利用するのが好都合なのでしょうか?Arrayの場合ポインタ式であることが絡んでくるでしょうか。 それとも昔から業務に固有の風習があり、この業務では習慣的にArrayとListが使われるが、 別の業務だとString[]とArrayが使われる、などのように 歴史的な理由で統一できていないのでしょうか? 全てではなくても、何らかの使われ方の違いや効率のよい 使い方の優先順位などがあれば教えてほしく思います。m(__)m
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
私は通常は配列かなあ~ 個数があらかじめわかっていないとき位しか、ArrayListは使いません。 ジェネリック(<T>)がJava5.0から実装されたので、ArrayListでも混乱することはなくなったと思いますが、 それまでは、何でも一緒に入れられたので、混乱を避けるために、 できるだけObject型に変換されてしまうクラス・メソッドは使わない ようにする必要があったのです(instanceofのチェックだらけになってしまう(笑)) これゆえ、crumさんに言わせるところの初期の頃しか知らない人ということに(笑) Vectorは使いません。推奨されていません。 基本的に古いJDKとの互換性にのみ残されているということのようです。 (とかいってるくせに、JDKのソースの中はVectorがたくさん出てくる(笑)) Vectorの代わりにArrayListを使います。 大きな違いは、「マルチスレッド保護の有無」と「自動拡張サイズ」でしょうか。 MapとCollectionは情報取得にキーが必要かどうかで決めればよいと思います。
その他の回答 (2)
- yokkou
- ベストアンサー率30% (34/111)
個数が分かっているなら配列(String[])を使用します 適当に作るものならArrayでも十分ですが、仕事の上ではパフォーマンスを考慮して、コストの少ない方向で判断しています 大規模になればなるほど、「塵積も」ですので
お礼
ご回答ありがとうございました。 なるほど、確かに私の携わった中で、総勢200名、3年規模の プロジェクトでは 型名[] 配列を使っていました。 多角的な視野で考えられるアドバイスになりました。 ありがとうございます。
私は配列はほとんど使いません。配列っぽいものを使いたいときはArrayListを使います。 Java5からは総称型のおかげで、ますます配列は使わなくなりました。周りを見ても配列を使っていることはほとんどないと思います。 多くの業務プログラムで配列にすべきかArrayListにすべきかを問題視するほど速度やメモリ使用量などを気にすることはないと思うので、使いやすいArrayListなどを使ったほうがいいと思います。 もちろん問題視される場合もあるので、そのときは改めて調査して、どちらにすべきか考えればよいだけです。 また、もし速度などが問題になったとき、Listインタフェースを実装しているほかのコレクションクラスにすることも容易です。 業務固有という話はあまり聞きません。こんな言語レベルの話が業務に影響するとも思えません。 そのプロジェクトの歴史的な理由はあると思います。とくにJavaの初期の頃しか知らない人が携わっていたとか、そもそもJavaを知らない人がメインのプログラマだったとか・・・。 すいません、Collection Framworkの内容については調べてください。
お礼
>Javaの初期の頃しか知らない人が携わっていたとか、そもそもJavaを知らない人がメインのプログラマだったとか・・・。 ありえます! 継承なんかも親、子、孫、ひ孫まで使っているプロジェクトを見たことがあります。もう、どこに何が入っているのか・・ せめて3段階くらいにして欲しい・・ >Java5からは総称型のおかげで、ますます配列は使わなくなりました そうなんですね。 ではこれからはArrayList<型>が主流になるのでしょうか。 ただ、対応していないシステムが数年、数十年は残り続けるのでしょうね。 しかも未だにjava1.3.1を使っているので・・(化石 しっかり本番のバージョンは確認しないとな~と、一介のPG/SEとして思います。 ご回答ありがとうございました。
お礼
>Vectorは使いません。推奨されていません。 ばっさりとした回答、ありがとうございました。 一角が消えただけでかなり検討がしやすくなりました。(^▽^) それにしても・・うちの先輩はVector使ってたんですけどね~(謎 >MapとCollectionは情報取得にキーが必要かどうかで決めればよいと思います。 なるほど、ありがとうございます。 また、重複を許すかどうかなどでは別の手法も必要ですね。 >マルチスレッド保護の有無 う~ん、そんな違いもあるのですね。 シングルトンパターンを使っているので今回は大丈夫だと思いますが・・。 質問者側の立場で答えて頂き、短い文章の中でも学ぶものは多かったです。ありがとうございました。m(__)m