zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    理解盒子模型
    Jackson 框架,轻易转换JSON
    JAVA仿百度分页
    最干净,最便捷的卸载Mysql
    Mysql 6.0安装过程(截图放不上去)
    开发JSP自定义标签
    JAVA实现文件上传
    开发过程中常用工具类
    JQUERY 简单易用的提示框插件
    什么是Bash Shell的内建(build in)命令
  • 原文地址:https://www.cnblogs.com/annofyf/p/9305470.html
Copyright © 2011-2022 走看看