csdn_wh_666
低调の男孩
采纳率0%
2021-02-26 20:08

java中的Map集合自定义构造器

public class MapTest {

    public static void main(String[] args) {

        Map<String,Integer> map = new TreeMap<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if (o1.equals(o2)) {
                    return 0;
                }
                else if (o1.equals("tom")) {
                    return -1;
                }
                else {
                    return 1;
                }
            }
        });
        map.put("zhang san",100);
        map.put("li si",98);
        map.put("jack",88);
        map.put("mike",97);
        map.put("tom",62);
        Set<String> set = map.keySet();
        for(String s : set)
            System.out.println(s+":"+map.get(s));     //这里为什么取出的zhang san对应的value值为null
    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • hadues 技术宅星云 2月前
    问题出在这个自定义的 Comparator 方法
    
    
    注意到Comparator接口要求实现一个比较方法,它负责比较传入的两个元素a和b, 
    
    如果a<b,则返回负数,通常是-1, 
    
    如果a==b,则返回0, 
    
     如果a>b,则返回正数,通常是1。 
    
    TreeMap内部根据比较结果对Key进行排序。
    
    
    其次,当使用字符串排序的时候,要使用自带的 compareTo 方法来进行排序
    
    修复方法如下:
    
    public class MapTest {
    
        public static void main(String[] args) {
     
            Map<String,Integer> map = new TreeMap<>(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                     return o1.compareTo(o2);
                }
            });
    
            map.put("zhang san",100);
            map.put("li si",98);
            map.put("jack",88);
            map.put("mike",97);
            map.put("tom",62);
            Set<String> set = map.keySet();
            for(String s : set){
                System.out.println(s+":"+map.get(s));  
            }  
            //这里为什么取出的zhang san对应的value值为null
        }
    }
    
     

    参考资料:

    https://www.liaoxuefeng.com/wiki/1252599548343744/1265117109276544

     

     

     

    点赞 评论 复制链接分享
  • henu_ws king帅 2月前

    应该是构造的comparator有问题,代码中只指定key等于tom返回-1,查询key的时候没法根据正确的排序查找

    点赞 评论 复制链接分享