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

  • 相关阅读:
    北京Uber优步司机奖励政策(3月3日)
    ubuntu安装phpstorm
    ubuntu安装typora
    PHP定时任务Crontab结合CLI模式详解
    mysql创建用户,并授予权限
    ubuntu下使用crontab定时器
    Ubuntu 查看当前目录使用的总空间大小
    ubuntu安装ruby,安装sass,安装compass
    open_basedir restriction in effect,解决php引入文件权限问题 lnmp
    canvas 画线
  • 原文地址:https://www.cnblogs.com/annofyf/p/9305470.html
Copyright © 2011-2022 走看看