У меня есть 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;
}
}
}
Если у вас есть понимание этого, пожалуйста, просветите меня.