• ベストアンサー

Vectorの中のVectorについて

現在Vectorを使ってプログラムを作っています。 その過程でVettorの中に違うVectorを追加していき、追加されたVectorのsize()を出したいのですが、どのように記述すればいいのかがいまいちわかりません。 というより、そもそもそういうことは可能なのでしょうか? 概要としては --------------------------------------------------------- String[] s ={"a","b","c","d","e","f","g","h","i","j"}; Vector v = new Vector(); Vector x = new Vector(); for (int i=0; i<=9; i++) { v.add(i, s[i]); } x.add(v); のように追加されたVectorの中のVetorの大きさ、つまりこの例なら結果としてVector vの中の要素の数10を出したいのです。 size()を使うのだとは思うのですが・・・・・・・・・。 どうすればVectorの中のVectorの要素数を返すことが出来るのでしょうか? ご教授していただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

Vectorのget()の返り値はObjectなので単純に x.get(0).size() とはできません。そこで、一度新しい変数(たとえばi)に Vector i=(Vector)x.get(0); と代入すれば、 i.size() として使うことができます。 ここで、注意したいのは Vector i=x.get(0); と書くことはできないことです。つまり、ObjectクラスはVectorクラスのサブクラスではないので、ObjectクラスのオブジェクトをVectorの変数に直接代入することはできず、Vectorにキャストしなければなりません。(ここで、get(0)の返りがVectorとは全く違うものが帰ってきたときはClassCastExceptionという実行時例外が起こります) ちなみに、直接 ((Vector)x.get(0)).size() と書くことも可能です。括弧がたくさんありますが、落ち着いて考えれば納得いく記述のはずです。つまり、((Vector)x.get(0))まででVectorクラスのオブジェクトとなっているのでsize()メソッドを呼び出すことが可能なのです。

JOS
質問者

お礼

ご返答ありがとうございます。 なるほど、((Vector)x.get(0)).size()のような書き方も出来るのですね。 Vectorを使っているときはVectorクラスとObjectクラスをつい一緒くたに考えてしまいがちな気がするので、キャストするということはとても勉強になりました。 どうもありがとうございました。

その他の回答 (4)

回答No.5

J2SE 5.0 であれば Genericsを利用して以下のように記述出来ます。 String[] s ={"a","b","c","d","e","f","g","h","i","j"}; Vector<String> v = new Vector<String>();//Stringを要素とするVector Vector<Vector> x = new Vector<Vector>();//Vectorを要素とするVector for (int i=0; i<=9; i++) { v.add(i, s[i]); } x.add(v); // キャストしなくてよい x.get(0).size();

JOS
質問者

お礼

お返事ありがとうございます。 5.0を使っている場合はそのように記述すれば、わかりやすい形でsizeがつかえるのですね。 また一つ、勉強になりました、どうもありがとうございました。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.3

まあ、例文から学習するレトロスペクティブな考え方もありますし、さくっとソースを書きます。 Vector foo = (Vector)x.get(0); foo.size(); 要するにxに入れた要素を別の変数にgetで代入し、size()を呼ぶだけです。

JOS
質問者

お礼

ご返答ありがとうございます。 やはりもう一つ作るのが一番手っ取り早いのですね。 そのことも念頭にいれて考えて生きたいと思います。 どうもありがとうございました。

回答No.2

get()メソッドで取得できます。それとも違うことで悩んでいるのでしょうか? APIリファレンスは見ていますか?ちゃんと書いてあります。 "Java Vector"などと検索すればすぐ出てきますよ。 クラスが持っているメソッドを調べるには必要不可欠です。

JOS
質問者

お礼

ご返答ありがとうございます。 APIリファレンスなどはわからないときは真っ先に見ますので、get()で指定した要素を取り出すこともわかっています。 ただ、それで取り出した要素をsize()で調べる、というプログラム記述がよくわからないのです。 単にv.size()と記述しても、もともと存在したVector vの大きさを調べてしまうだけです(当然ですが) 。 私が行いたいのは『Vector(1)(Vector x)の中にあるVector(2)(Vector v)の要素数を出す』です。 凄く単純なことなのかもしれませんが、それがどうしても頭の中で構築できなくて困っています。 プログラム文を見てしまえばなんでこう考えられなかったんだろうということなのかもしれないのですが・・・・・。

回答No.1

Vector xからVector vを取り出して、v.size()

JOS
質問者

お礼

返答ありがとうございます。 理屈ではそのやり方なのはわかっているのですが、肝心の記述がわからなくて困っています・・・・・。