gpt4 book ai didi

java - TreeMap 绞杀工作

转载 作者:行者123 更新时间:2023-11-30 03:51:13 25 4
gpt4 key购买 nike

我有一个将字符串与 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com