Java 如何使按值排序的树映射在更改元素时保持排序?

Java 如何使按值排序的树映射在更改元素时保持排序?,java,sorting,treemap,Java,Sorting,Treemap,我有一个字符串键和int值的映射,我需要对它们进行排序,并在更改值时保持它们的排序。 我尝试对已排序的对使用树映射,对未排序的巴黎使用法线映射,以便在比较器中使用它,但在一个值传递另一个值后,我得到一个空期望值,这是防御: public static TreeMap<String, Long> countryData; public static ValueComparator bvc; public static void setCountryData(HashMap<St

我有一个字符串键和int值的映射,我需要对它们进行排序,并在更改值时保持它们的排序。 我尝试对已排序的对使用树映射,对未排序的巴黎使用法线映射,以便在比较器中使用它,但在一个值传递另一个值后,我得到一个空期望值,这是防御:

public static TreeMap<String, Long> countryData;
public static ValueComparator bvc;

public static void setCountryData(HashMap<String, Long> map){
    bvc = new ValueComparator(map);
    countryData = new TreeMap<String, Long>(bvc);
    countryData.putAll(map);
    System.out.println(Arrays.toString(countyNames));
    System.out.println(countryData.values());


}

public static class ValueComparator implements Comparator<String> {
    Map<String, Long> base;

    public ValueComparator(Map<String, Long> base) {
        this.base = base;
    }


    public int compare(String a, String b) {
        if(base.get(a).equals(base.get(b))){
            return 0;
        }
        if (base.get(a) > base.get(b)) {
            return -1;
        } else {
            return 1;
        }
    }
}
在一个值传递另一个值并尝试访问它之后,我得到一个空值,我如何才能做到这一点

如何获得按值排序的
TreeMap

你不能。它们是按键排序的


不相关。

但是我做了一个自定义比较器来比较不同的值。。如果是错误的方法,那么正确的方法是什么?如果自定义比较器没有返回键的顺序,
TreeMap
可能无法工作。这违反了合同。此外,更新任何用作密钥的内容也违反了合同。你不能这么做,我同意。无法编写按实际工作的值排序的映射实现。您可以保留一个法线贴图,然后在每次使用它进行迭代时按值对其进行排序,但这是您所能得到的最好结果。
General.bvc.base.put(country, newValue);
General.countryData.put(country, newValue);