public class A{
TreeMap<String, Double> sortedPairList;
HashMap<String, Double> PairList = new HashMap<String, Double>();
public static void main(String[] args) {
A p = new A();
p.PairList.put("a00", 0.3920948902348);
p.PairList.put("a01", 0.4920948902348);
p.PairList.put("a02", 0.3420948902348);
p.PairList.put("a03", 0.5920948902348);
p.PairList.put("a04", 0.6720948902348);
p.PairList.put("a05", 0.3940948902348);
p.PairList.put("a06", 0.3920948902348);
p.PairList.put("a07", 0.9920948902348);
p.PairList.put("a08", 0.6920948902348);
p.PairList.put("a09", 0.7920948902348);
p.PairList.put("a10", 0.8820948902348);
p.PairList.put("a11", 0.1220948902348);
p.PairList.put("a12", 0.1920948902348);
p.PairList.put("a13", 0.4520948902348);
p.PairList.put("a14", 0.3434948902348);
p.PairList.put("a15", 0.5690948902348);
p.PairList.put("a16", 0.5920948902348);
p.PairList.put("a17", 0.8920948902348);
p.PairList.put("a18", 0.920948902348);
p.PairList.put("a19", 0.9820948902348);
p.PairList.put("a20", 0.1920948902348);
p.PairList.put("a21", 0.5920948902348);
p.PairList.put("a22", 0.3920948902348);
p.PairList.put("a23", 0.3920948902348);
p.sortPairList(p.PairList) ;
for(String s : p.sortedPairList.keySet()){
System.out.println("key:: value: " + s + " ::"+p.sortedPairList.get(s));
}
}//end of main
public void sortPairList(HashMap<String, Double> pairlist) {
ValueComparator comp = new ValueComparator(pairlist);
sortedPairList = new TreeMap<String, Double>(comp);
sortedPairList.putAll(pairlist);
}// end of sortedPredicatePairList
class ValueComparator implements Comparator<Object> {
Map<String, Double> temp;
public ValueComparator(Map<String, Double> base) {
this.temp = base;
}
public int compare(Object p1, Object p2) {
if ((Double) temp.get(p1) < (Double) temp.get(p2)) {
return 1;
} else if ((Double) temp.get(p1) == (Double) temp.get(p2)) {
return 0;
} else {
return -1;
}
}
}// end of class ValueComparator
}//end of classA
*我得到的輸出是下面的,爲什麼我收到空在其中重複的值:*Java:爲什麼我在輸出中變爲null?
鍵::值:A07 :: 0.9920948902348
鍵::值:A19 :: 0.9820948902348
鍵::值:A18 :: 0.920948902348
鍵::值:A17 :: 0.8920948902348
鍵::值:A10 :: 0.8820948902348
鍵::值:A09 :: 0.7920948902348
鍵::值:A08 :: 0.6920948902348
鍵::值:A04 :: 0.6720948902348
鍵::值:A03 :: 0.5920948902348
鍵::值:A21 ::空
鍵::值:A16 ::空
鍵::值:A15 :: 0.5690948902348
鍵::值:A01 :: 0.4920948902348
鍵::值:A13 :: 0.4520948902348
鍵::值:A05 :: 0.3940948902348
鍵::值:A06 :: 0.3920948902348
鍵::值:A23 :: 0.3920948902348
鍵::值:A22 :: 0.3920948902348
鍵::值:A00 ::空
鍵::值:A14 :: 0.3434948902348
鍵::值:A02 :: 0.3420948902348
鍵:: v ALUE:A12 :: 0.1920948902348
鍵::值:A20 ::空
鍵::值:A11 :: 0.1220948902348
但我沒能看到我比較錯誤,請明確告訴è什麼是錯的比較器的代碼? – lancelot
查看Tree Map API的鏈接,仔細閱讀「Compare()與Equals()不一致」的含義。換句話說,您的TreeMap中的鍵由ValueComparator.compare()方法「相等」,但不等於String.equals()方法 – korifey