- - PR -
LinkedHashMapにArrayListを格納できない?
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-17 21:36
お世話になっています。
LinkedHashMapがうまく扱えず困っています。 ご教授願います。 LinkedHashMapのkeyとvaluesにArrayList で作成したオブジェクトはputできないんでしょうか。 以下ソースです。 ---------------------------------------------------------------------------------------- Map sankaMap = new LinkedHashMap(); while (.....) { //格納用配列araylistの生成 ArrayList tntActual = new ArrayList(); TournamentBean tntInf = new TournamentBean(); tntInf.setId(rsetTntDate.getString("id")); tntInf.setTntDt(rsetTntDate.getString("tnt_dt")); tntInf.setPlace(rsetTntDate.getString("place")); tntInf.setStartTime(rsetTntDate.getString("st_time")); tntInf.setEndTime(rsetTntDate.getString("ed_time")); tntInf.setNearSt(rsetTntDate.getString("near_st")); tntInf.setLevel(rsetTntDate.getString("level")); tntInf.setRemarks(rsetTntDate.getString("remarks")); //格納用配列のArrayListに1レコードを格納 tntActual.add(tntInf); ArrayList memberActual = new ArrayList(); while (rsetSankaInf.next()) { SankaActualBean member = new SankaActualBean(); member.setBackNumber(rsetSankaInf.getString("back_number")); member.setJName(rsetSankaInf.getString("j_name")); member.setSankaFlg(rsetSankaInf.getString("sanka_flg")); member.setModDt(rsetSankaInf.getString("mod_dt")); //格納用配列のArrayListに1レコードを格納 memberActual.add(member); } sankaMap.put(tntActual, memberActual);←←←←←←←←ここでエラーになります。 以下エラーの内容。 java.util.ArrayList しかでません。 以上、宜しくお願いします。 } | ||||||||
|
投稿日時: 2004-03-17 22:24
こんばんはニシトミです。
put出来ると思いますけど ソースを見てみると while文の中で tntActual、memberActual定義してますので 構文エラーなのかなと思います。 | ||||||||
|
投稿日時: 2004-03-17 22:25
上記質問の答えとしては、「出来ます」 です。 エラーになるとの事ですが、原因は別にあると思います。 例外がスローされているんでしょうか? 発生する現象を具体的に書くと、解答を得られ易いと思います。 | ||||||||
|
投稿日時: 2004-03-17 22:38
下記のようなコードだと思われますので、大丈夫なのでは? 違っていたら、指摘してください。> やまとさん。
関係無いかもしれませんが・・・。 トーナメント:参加者 = n:n のデータ構造ってことでいいんですよね? [ メッセージ編集済み 編集者: でゅうく 編集日時 2004-03-17 22:44 ] | ||||||||
|
投稿日時: 2004-03-17 22:42
うわホントだ
while (rsetSankaInf.next()) { うっかり見落としてました。 失礼しました | ||||||||
|
投稿日時: 2004-03-18 01:29
スコープの問題では?
tntActualはwhileの中で宣言した後、 whileの外で参照することはできないと思います。 そもそもコンパイルは通りましたか? | ||||||||
|
投稿日時: 2004-03-18 14:24
それは、スタックトレースの表示ではないですよね? どうやってエラーの箇所を特定したのでしょうか? | ||||||||
|
投稿日時: 2004-03-22 20:37
ニシトミさん、でゅうくさん、かつのりさん、シュンさん
返事が遅くなってしまい申し訳ありません。 みなさんのご指摘とおり、While無いでArrayListを生成していましたので、 Whileの外に出しました。 //大会情報格納用TreeMap TreeMap sankaMap = new TreeMap();←←←←←TreeMapに変更しました //格納用配列araylistの生成 ArrayList tntActual = new ArrayList();←←←←←←←← Whileの外で生成 ArrayList memberActual = new ArrayList();←←←←←←← //取得可能な行数分だけループ while (rsetTntDate.next()) { TournamentBean tntInf = new TournamentBean(); tntInf.setId(rsetTntDate.getString("id")); tntInf.setTntDt(rsetTntDate.getString("tnt_dt")); tntInf.setPlace(rsetTntDate.getString("place")); tntInf.setStartTime(rsetTntDate.getString("st_time")); tntInf.setEndTime(rsetTntDate.getString("ed_time")); tntInf.setNearSt(rsetTntDate.getString("near_st")); tntInf.setLevel(rsetTntDate.getString("level")); tntInf.setRemarks(rsetTntDate.getString("remarks")); //格納用配列のArrayListに1レコードを格納 tntActual.add(tntInf); // データベースへのアクセス db.open(); //大会日付を元に参加テーブルとメンバーテーブルから情報を取得 StringBuffer selectSankaActual = new StringBuffer( "select " + "s.back_number as back_number," + "m.j_name as j_name," + "s.sanka_flg as sanka_flg," + "s.mod_dt as mod_dt " + "from member m,sanka_actual s " + "where s.tnt_dt ='" + rsetTntDate.getString("tnt_dt") + "'and m.back_number = s.back_number " + " group by back_number" + " order by tnt_dt desc,back_number asc"); rsetSankaInf = db.getResultSet(selectSankaActual.toString()); while (rsetSankaInf.next()) { SankaActualBean member = new SankaActualBean(); member.setBackNumber(rsetSankaInf.getString("back_number")); member.setJName(rsetSankaInf.getString("j_name")); member.setSankaFlg(rsetSankaInf.getString("sanka_flg")); member.setModDt(rsetSankaInf.getString("mod_dt")); //格納用配列のArrayListに1レコードを格納 memberActual.add(member); } sankaMap.put(tntActual, memberActual);←←←←←←←エラーになっていると思われる場所 } しかし、やはり同じエラーになってしまいます。 エラーの判断は、 } catch (Exception e) { request.setAttribute("msg1", "予期せぬエラーです:"); request.setAttribute("msg2", e.getMessage()); でJSPに投げています。そこで、java.util.ArrayList しかでませんでした。 >関係無いかもしれませんが・・・。 >トーナメント:参加者 = n:n のデータ構造ってことでいいんですよね? やりたいことは、 @トーナメント情報取得 A@のトーナメントに該当する参加者を複数取得。 BTreeMapクラスのsankaMapに@、Aを格納し、KEYとVALUESの対応付ける。 CJSPで出力。 です。 デバックで確認したところ、 sankaMapには、大会2つまで格納(参加者も格納)後、 今回のエラーになっているみたいです。 なぜだか分かりません。教えていただけないでしょうか。 | ||||||||
