作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个将字符串与 double 值相匹配的 HashMap,在对这些值进行一些修改后,我尝试使用 TreeMap 按值对其进行排序。
它可以工作,我可以打印整个树,但是当我尝试通过它的键访问特定值时,它大约有一半的时间返回 null,并且总是在相同的键上,即使它们的值与其他。同样,重试删除 key 也不起作用。
这是我的问题的一个例子。它实际上并不是我的代码的一部分,但它重现了同样的问题:
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;
}
}
}
如果您对此有任何见解,请赐教。
最佳答案
您的问题是,如果原始映射的两个条目具有相同的值,则仅保留 freq
中最后插入的条目。因此,freq
中已替换的键将从树形图中删除。
示例:
freq.put("bara" , 0.1142204454597373);
freq.put("religieux" , 0.05711022272986865);
freq.put("alliance" , 0.05711022272986865);
然后 freq.get("religieux")
返回 null
因为它与 "alliance"
和 具有相同的值随后插入了“alliance”
,“religieux”
已被“alliance”
替换,因为比较器认为它们相等。
此外,正如其他答案中所建议的,您需要比较执行 base.get(a).equals(base.get(b))
Double
值/p>
关于java - TreeMap 绞杀工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24405118/
我是一名优秀的程序员,十分优秀!