我想把一些關鍵值放在HashMap中,然後嘗試使用TreeMap進行分類,如下所示。問題是如果地圖中有相似的值,那麼在排序之後它正在考慮其中的任何一個。使用TreeMap排序問題
import java.util.*;
public class HashmapExample {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
ValueComparator bvc = new ValueComparator(map);
TreeMap<String,Integer> sorted_map = new TreeMap(bvc);
map.put("A",99);
map.put("B",67);
map.put("C",123);
map.put("G",67);
map.put("F",67);
map.put("H",67);
map.put("D",6);
System.out.println("unsorted map");
for (String key : map.keySet()) {
System.out.println("key/value: " + key + "/"+map.get(key));
}
sorted_map.putAll(map);
System.out.println("results after sorting");
for (String key : sorted_map.keySet()) {
System.out.println("key/value: " + key + "/"+sorted_map.get(key));
}
}
}
class ValueComparator implements Comparator {
Map base;
public ValueComparator(Map base) {
this.base = base;
}
public int compare(Object a,Object b) {
if((Integer)base.get(a) > (Integer)base.get(b)) {
return 1;
} else if((Integer)base.get(a) == (Integer)base.get(b)) {
return 0;
} else {
return -1;
}
}
}
這個輸出是像下面
unsorted map
key/value: D/6
key/value: A/99
key/value: F/67
key/value: H/67
key/value: C/123
key/value: B/67
key/value: G/67
results after sorting
key/value: D/6
key/value: F/67
key/value: A/99
key/value: C/123
對於B,G,F和H鍵我給值作爲67.排序地圖之後,它僅顯示F值和eleminating乙後, G和H值。我想顯示outputsomething像下面
key/value: D/6
key/value: B/67
key/value: G/67
key/value: F/67
key/value: H/67
key/value: A/99
key/value: C/123
如果我不喜歡((整數)base.get( a)>(整數)base.get(b))?1:-1; 然後顯示爲NULL的值 – JavaGeek 2011-02-17 20:31:32
@Sukumar Ramadugu,我編輯了一些「正確」的答案) – 2011-02-17 20:38:22