- - PR -
TreeMapでソート 同一Keyの区別
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 2006-02-23 15:28
1.4.2では仕様どおりです。
TreeMap#put public Object put(Object key, Object value) 指定の値と指定されたキーをこのマップに関連付けます。マップが以前にこのキーのマッピングを保持していた場合、古い値が置き換えられます。 |
|
投稿日時: 2006-02-23 15:39
お返事ありがとうございます。
確かに、木でソートしてるので同じノードがあれば、 要素が書き換えられるというのは分かります。 同じKeyで、要素が違うという様にはできないのでしょうか? |
|
投稿日時: 2006-02-23 16:44
ソートしたいだけなら Collections.sort() や Arrays.sort() があります。
Map に入れることが必要なのでしょうか? そうだとすると、キーはどうしても一意である必要があるので、値の方を LinkedList<Double> ではなく、LinkedList<Double>の配列やSetやListにすれば良いのではないでしょうか。 |
|
投稿日時: 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