- PR -

TreeMapでソート 同一Keyの区別

1
投稿者投稿内容
くれよん
ベテラン
会議室デビュー日: 2005/04/28
投稿数: 74
投稿日時: 2006-02-23 15:02
こんにちわ。いつも勉強させていただいています。

現在次のようにしてオブジェクトのソートをしてます。

double key[]=new double[]{0.1, 0.01, 0.001, 0.0001};
double vector[][]=new double[][]{{0.11,0.12,0.13},
{0.21,0.22,0.23},
{0.31,0.32,0.33},
{0.41,0.42,0.43}};

TreeMap<Double,LinkedList> sortMap = new TreeMap<Double,LinkedList>();
for(int i=0;i<key.length;i++){
LinkedList<Double> list = new LinkedList<Double>();
for(int j=0;j<vector[i].length;j++){
list.add((vector[i][j]));
}
sortMap.put(new Double(key[i]),list);
}

ここで、Keyに同じ値が、2つ以上あると上書きされてしまいます。
ご教授宜しくお願いします。


[ メッセージ編集済み 編集者: ジュン 編集日時 2006-02-23 15:19 ]
kuma
大ベテラン
会議室デビュー日: 2004/02/25
投稿数: 110
投稿日時: 2006-02-23 15:28
1.4.2では仕様どおりです。
TreeMap#put
public Object put(Object key, Object value)
指定の値と指定されたキーをこのマップに関連付けます。マップが以前にこのキーのマッピングを保持していた場合、古い値が置き換えられます。
くれよん
ベテラン
会議室デビュー日: 2005/04/28
投稿数: 74
投稿日時: 2006-02-23 15:39
お返事ありがとうございます。

確かに、木でソートしてるので同じノードがあれば、
要素が書き換えられるというのは分かります。

同じKeyで、要素が違うという様にはできないのでしょうか?
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-02-23 16:44
ソートしたいだけなら Collections.sort() や Arrays.sort() があります。

Map に入れることが必要なのでしょうか? そうだとすると、キーはどうしても一意である必要があるので、値の方を LinkedList<Double> ではなく、LinkedList<Double>の配列やSetやListにすれば良いのではないでしょうか。

くれよん
ベテラン
会議室デビュー日: 2005/04/28
投稿数: 74
投稿日時: 2006-02-23 18:06
<K,V>の両方(?)をソートして両方とも使用したいので
TreeMapかなと思ったんですけど、TreeMapの使い方は合ってますか?

汚いですけど、こんな感じでできました。

double key[]=new double[]{0.1, 0.1, 0.001, 0.0001};
double vector[][]=new double[][]{{0.11,0.12,0.13},
{0.21,0.22,0.23},
{0.31,0.32,0.33},
{0.41,0.42,0.43}};

TreeMap<Double,LinkedList> sortMap = new TreeMap<Double,LinkedList>();
for(int i=0;i<key.length;i++){
if(sortMap.containsKey(new Double(key[i]))){
LinkedList<Double> sublist = new LinkedList<Double>();
for(int j=0;j<vector[i].length;j++){
sublist.add((vector[i][j]));
}
sortMap.get(new Double(key[i])).add(sublist);
}else{
LinkedList<LinkedList> list = new LinkedList<LinkedList>();
LinkedList<Double> sublist = new LinkedList<Double>();
for(int j=0;j<vector[i].length;j++){
sublist.add((vector[i][j]));
}
list.add(sublist);
sortMap.put(new Double(key[i]),list);
}
}
1

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