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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM