Java TreeMap(比较器)和get方法忽略了比较器

public final Comparator<String> ID_IGN_CASE_COMP = new Comparator<String>() {

        public int compare(String s1, String s2) {
            return s1.compareToIgnoreCase(s2);
        }
    };

private Map< String, Animal > _animals = new TreeMap< String, Animal >(ID_IGN_CASE_COMP);

我的问题是,如何使用方法get(id)忽略给定的比较器.我希望地图按Case Insensitive排序,但是,当我通过给定键获取值时,我希望它区分大小写.

我认为答案很简单.实现你自己的比较器,它做一个不区分大小写的排序,但不为“A”和“a”返回0 ……也对它们进行排序.

问题是你的比较器为比较(“A”,“a”)情况返回0,这意味着就地图而言它是相同的密钥.

使用比较器,如:

public final Comparator<String> ID_IGN_CASE_COMP = new Comparator<String>() {

    public int compare(String s1, String s2) {
        int result = s1.compareToIgnoreCase(s2);
        if( result == 0 )
            result = s1.compareTo(s2);
        return result;
    }
};

然后所有键都将进入,无论大小写如何,“a”和“A”仍将一起排序.

换句话说,get(“a”)将为您提供与get(“A”)不同的值…并且它们都将显示在keySet()迭代器中.它们将被整理在一起.

翻译自:https://stackoverflow.com/questions/1782674/java-treemap-comparator-and-get-method-ignoring-the-comparator

转载注明原文:Java TreeMap(比较器)和get方法忽略了比较器