【发布时间】:2014-06-25 09:35:53
【问题描述】:
我有一个 HashMap 匹配一个双精度字符串,我尝试在对这些值进行一些修改后使用 TreeMap 按值对其进行排序。
它可以工作,我可以打印整个树,但是当我尝试通过它的键访问特定值时,它在大约一半的时间返回 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));
}
这是我用来构建 TreeMap 的比较器:
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;
}
}
}
如果您对此有任何见解,请不吝赐教。
【问题讨论】:
-
什么样的修改?如果该比较器变得不一致或不完整,TreeMap 将停止工作。
-
我尝试了equals方法,大约一半的条目消失了......修改只是将值除以一个整数。我在示例中采用的值是该修改的结果