- PR -

TreeMapについて

投稿者投稿内容
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2005-06-29 19:38
未記入さん
コード:
while (db.moveNext()){
r = new RecordKey();//newを入れてみました。
//データベースからデータを取得(一意なので被る事はない)
r.setTodou(rec.getString("TODOU"));
r.setMise(rec.getString("MISE"));
r.setGetudo(rec.getString("GETUDO"));

map.put(r,value);
}

r = new RecordKey();
r.setTodou(todou);
r.setMise(mise);
r.setGetudo(yearMonth);//←強引に値を入れても反応無し
System.out.println(map.get(r));//同じ値しか出てこない 



まずは、少量のサンプルデータで、格納された値を確認してみてはいかがでしょう。
例えば、
コード:
Record implements Comparable {
  ...

  public String toString() {
    return Todou + ", " + mise + ", " + getudo;
  }
}


とやって、Record内容を表示できるようにした上で、

どこか適当なところで
コード:
for(Iterator it = map.keySet().iterator(); it.hasNext();) {
  System.out.println(it.next());
}


とやってやれば、キーの内容の一覧を取り出すことが出来ます。

データが正しく登録されていましたか?
未記入
会議室デビュー日: 2005/06/28
投稿数: 11
投稿日時: 2005-06-29 20:19
Recordクラス(comparableをimplementしたもの)のcompareメソッドを下記のように変更するといけました!!
一応、無事完成♪という事になりました!
まだまだ未熟な点が多々あるので、もう一度みなさんの記事を読み直し勉強したいと思います。

ーーーーーーーーーーーーーーーーーーーーーーーーーー
public int compareTo(Object o) {
RecordKey r = (RecordKey)o;
int result = r.todou.compareTo(todou);
if(result == 0){
result = r.mise.compareTo(mise);
if(result == 0){
//今までは月度を比較対照に入れていなかったが今回追加!
result = r.getudo.compareTo(getudo);
}
}
return result;
}

//上記のcompareメソッドを持ったrecordクラスをmapに入力
Record r1 = new Record();
r.setTodou("データベースから取得");
r.setMise(""データベースから取得");
r.setGetudo("データベースから取得");
map.put(r1,"1000")

Record r2 = new Record();
r2.setTodou("値指定");
r2.setMise("値指定");
r2.setGetudo("値指定");
map.get(r2);
ーーーーーーーーーーーーーーーーーーーーーーーーーー
このような流れで値を正しく取得出来ました。

3つをキーにした場合、3つとも比較対象に入れないといけないのでしょうか?
本当にありがとうございました。
このキーに関して何かアドバイスありましたらよろしくお願いします。
2日悩んだかいがありました。
みなさんのおかげで成長出来ました。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-06-29 21:53
キーの数に対して動的に比較を行うのは、
リフレクションなどで自動的に行う事も可能でしょう。

スキルアップ/キャリアアップ(JOB@IT)