我有一個匹配字符串的HashMap和一個double,我嘗試使用TreeMap對值進行一些修改後對它進行排序。TreeMap strangley working
它的工作原理和我可以打印整個樹,但是當我嘗試通過它的鍵訪問特定值時,它大約一半的時間返回null,總是在相同的鍵上,即使它們的值沒有那麼不同從其他人那裏。 同樣,重試刪除密鑰不起作用。
這是我的問題的一個例子。這是不是真的我的代碼的一部分,但它再現了同樣的問題:
Map<String, Double> freq = new HashMap<String, Double>();
ValueComparator classif = new ValueComparator(freq);
TreeMap<String, Double> sorted_freq = new TreeMap<String, Double>(classif);
freq.put("bara" , 0.1142204454597373);
freq.put("religieux" , 0.05711022272986865);
freq.put("alliance" , 0.05711022272986865);
freq.put("ethnique" , 0.05711022272986865);
freq.put("officiers" , 0.1142204454597373);
freq.put("ascendants" , 0.05711022272986865);
freq.put("correspondait" , 0.05711022272986865);
freq.put("toko" , 0.05711022272986865);
freq.put("evenement" , 0.1142204454597373);
freq.put("certainement" , 0.05711022272986865);
freq.put("chance" , 0.05711022272986865);
sorted_freq.putAll(freq);
for(String key:freq.keySet()){
System.out.println(key+" : "+freq.get(key));
}
System.out.println("------------------------------------------------------------------");
for(String key:sorted_freq.keySet()){
System.out.println(key+" : "+sorted_freq.get(key));
}
這裏是我使用建樹形圖中比較:
class ValueComparator implements Comparator<String> {
Map<String, Double> base;
public ValueComparator(Map<String, Double> freq) {
this.base = freq;
}
public int compare(String a, String b) {
if (base.get(a) > base.get(b)) {
return -1;
}else if(base.get(a)==base.get(b)){
return 0;
} else {
return 1;
}
}
}
如果您有任何insigth那請賜教。
什麼樣的修改?如果該比較器變得不一致或不完整,則TreeMap將停止工作。 – Thilo
我嘗試了等號方法,大約一半的條目消失了......修改只是將整數值除。我在示例中使用的值是修改 – Laetan