
失礼いたします。
きっとこの質問は大勢の方が持っているのではないかと思い質問します。
自分はDBを利用した業務系のwebアプリ開発を行っているのですが、
DB情報の取得の際、その情報を何に格納するかで疑問が生じました。
例えば会社情報を検索したとして、各会社の情報はそれぞれ1つのインスタンスに持たせます。
これは会社数だけ繰り返されます。
そこで、そのインスタンスを順次何に入れるかなのですが、
型を持ったインスタンスの配列にするケースとVectorに入れるケースと両方見たことがあります。
きっと他にも方法は多種あるでしょう。
ではここで、配列(この場合インスタンスの配列)とVector、ArrayやListの使い方、またMapとCollectionなどの違いはどのように
利用するのが好都合なのでしょうか?Arrayの場合ポインタ式であることが絡んでくるでしょうか。
それとも昔から業務に固有の風習があり、この業務では習慣的にArrayとListが使われるが、
別の業務だとString[]とArrayが使われる、などのように
歴史的な理由で統一できていないのでしょうか?
全てではなくても、何らかの使われ方の違いや効率のよい
使い方の優先順位などがあれば教えてほしく思います。m(__)m
No.2ベストアンサー
- 回答日時:
私は通常は配列かなあ~
個数があらかじめわかっていないとき位しか、ArrayListは使いません。
ジェネリック(<T>)がJava5.0から実装されたので、ArrayListでも混乱することはなくなったと思いますが、
それまでは、何でも一緒に入れられたので、混乱を避けるために、
できるだけObject型に変換されてしまうクラス・メソッドは使わない
ようにする必要があったのです(instanceofのチェックだらけになってしまう(笑))
これゆえ、crumさんに言わせるところの初期の頃しか知らない人ということに(笑)
Vectorは使いません。推奨されていません。
基本的に古いJDKとの互換性にのみ残されているということのようです。
(とかいってるくせに、JDKのソースの中はVectorがたくさん出てくる(笑))
Vectorの代わりにArrayListを使います。
大きな違いは、「マルチスレッド保護の有無」と「自動拡張サイズ」でしょうか。
MapとCollectionは情報取得にキーが必要かどうかで決めればよいと思います。
>Vectorは使いません。推奨されていません。
ばっさりとした回答、ありがとうございました。
一角が消えただけでかなり検討がしやすくなりました。(^▽^)
それにしても・・うちの先輩はVector使ってたんですけどね~(謎
>MapとCollectionは情報取得にキーが必要かどうかで決めればよいと思います。
なるほど、ありがとうございます。
また、重複を許すかどうかなどでは別の手法も必要ですね。
>マルチスレッド保護の有無
う~ん、そんな違いもあるのですね。
シングルトンパターンを使っているので今回は大丈夫だと思いますが・・。
質問者側の立場で答えて頂き、短い文章の中でも学ぶものは多かったです。ありがとうございました。m(__)m
No.3
- 回答日時:
個数が分かっているなら配列(String[])を使用します
適当に作るものならArrayでも十分ですが、仕事の上ではパフォーマンスを考慮して、コストの少ない方向で判断しています
大規模になればなるほど、「塵積も」ですので
ご回答ありがとうございました。
なるほど、確かに私の携わった中で、総勢200名、3年規模の
プロジェクトでは 型名[] 配列を使っていました。
多角的な視野で考えられるアドバイスになりました。
ありがとうございます。
No.1
- 回答日時:
私は配列はほとんど使いません。
配列っぽいものを使いたいときはArrayListを使います。Java5からは総称型のおかげで、ますます配列は使わなくなりました。周りを見ても配列を使っていることはほとんどないと思います。
多くの業務プログラムで配列にすべきかArrayListにすべきかを問題視するほど速度やメモリ使用量などを気にすることはないと思うので、使いやすいArrayListなどを使ったほうがいいと思います。
もちろん問題視される場合もあるので、そのときは改めて調査して、どちらにすべきか考えればよいだけです。
また、もし速度などが問題になったとき、Listインタフェースを実装しているほかのコレクションクラスにすることも容易です。
業務固有という話はあまり聞きません。こんな言語レベルの話が業務に影響するとも思えません。
そのプロジェクトの歴史的な理由はあると思います。とくにJavaの初期の頃しか知らない人が携わっていたとか、そもそもJavaを知らない人がメインのプログラマだったとか・・・。
すいません、Collection Framworkの内容については調べてください。
>Javaの初期の頃しか知らない人が携わっていたとか、そもそもJavaを知らない人がメインのプログラマだったとか・・・。
ありえます!
継承なんかも親、子、孫、ひ孫まで使っているプロジェクトを見たことがあります。もう、どこに何が入っているのか・・
せめて3段階くらいにして欲しい・・
>Java5からは総称型のおかげで、ますます配列は使わなくなりました
そうなんですね。
ではこれからはArrayList<型>が主流になるのでしょうか。
ただ、対応していないシステムが数年、数十年は残り続けるのでしょうね。
しかも未だにjava1.3.1を使っているので・・(化石
しっかり本番のバージョンは確認しないとな~と、一介のPG/SEとして思います。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をセッションに割り当てた後で
-
【Ajax通信&Java】配列の受け取...
-
C言語でunsigned char配列を連...
-
javaでEUC-JP文字列→UTF-8への変換
-
2次元配列のコピー
-
C#で配列の戻り値について
-
動的配列確保
-
[Ljava.lang.Stringってなんですか
-
String型をbyte型へ
-
Javaで文字と数字が混ざったも...
-
【C#】ハッシュテーブル(連想...
-
jspでの二次元配列
-
ページング
-
この警告はどうすれば?
-
C言語のポインターに関する警告
-
System.err. printlnとSystem.o...
-
JavaScriptの変数をjavaのメソ...
-
ORA-01858: 数値を指定する箇所...
-
VBAで配列の計算
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[Ljava.lang.Stringってなんですか
-
Javaで文字と数字が混ざったも...
-
この警告はどうすれば?
-
配列の中に複数存在する数がい...
-
【C#】ハッシュテーブル(連想...
-
ページング
-
C#の質問
-
n番目に大きな値を探索する
-
javaでデータベース(mysql)か...
-
C#で動的配列Listの中身をListB...
-
C言語でunsigned char配列を連...
-
同じ配列またはクラスを、2回...
-
Javaで文字を漢字であるか否か...
-
ArrayListからBean配列に値をセ...
-
Java配列の問題を教えてくださ...
-
ランダムでのboolean値の与え方
-
配列で、値の入っている要素数...
-
strutsで2次元配列をやりとりす...
-
java StringとString[]の違い
-
javaでEUC-JP文字列→UTF-8への変換
おすすめ情報