• Java学习笔记_180713_TreeMap_Comparator重写


    //HashMapTest.java
    package com.fyf.demo06Map;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.TreeMap;
    public class HashMapTest {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Map<String, Integer> scores=new HashMap<>();
    		Map<String, Integer> scores2=new TreeMap<String,Integer>(new MyComparator(scores, true));
    		
    		scores.put("Tom", 60);
    		scores.put("Jerry", 90);
    		scores.put("Morty", 59);
    		scores.put("Ricky", 100);
    		System.out.println("HashMap: "+scores);		
    		
    		scores2.clear();
    		scores2.putAll(scores);	
    		System.out.println("TreeMap: "scores2);
    	}
    
    }
    
    //MyComparator.java
    package com.fyf.demo06Map;
    
    import java.util.Comparator;
    import java.util.Map;
    
    public class MyComparator implements Comparator<String> {
    	Map<String, Integer> map;
    	boolean reverse;
    	public MyComparator(Map<String, Integer> map,boolean reverse){		
    		this.map=map;
    		this.reverse=reverse;
    	}	
    	@Override
    	public int compare(String s1,String s2){
    		if(reverse)
    			return map.get(s1)<map.get(s2)?1:-1;			
    		return map.get(s1)>map.get(s2)?1:-1;		
    	}
    }
    

     代码主要实现了重写TreeMap的比较器然后根据Map Value进行排序的功能,具体思路:

    比较器默认比较的是Key值,正常情况下重写Comparator也是重写比较Key值,考虑到当Map确定时,可以通过Map.get(Key)的方法确定Value的值,此时比较value的值实现TreeMap按照value排序。

    为了确定Map,首先实例化一个HashMap对象,再将它传递给重写后的比较器,通过TreeMap.putAll(Map)即可完成排序。

    比较器重写:

    重载生成方法,传递一个Map参数用于获得map.get(key),一个boolean参数确定是否反向排序

    代码执行结果:

    参考自:https://blog.csdn.net/u011734144/article/details/52384284

  • 相关阅读:
    个人收集
    30个提高Web程序执行效率的好经验
    如何进行有效的代码检查
    软件测试杂谈
    论dotnet应用程序通用开发方法的弊端
    给Linux增加硬盘的方法
    知识分子的生活态度
    深入认识敏捷开发和面向对象
    使用自定义主题让Windows Live Writer在本地预览语法高亮效果
    软件工程项目中数据库的作用以及敏捷开发
  • 原文地址:https://www.cnblogs.com/annofyf/p/9305470.html
Copyright © 2020-2023  润新知