Java TreeMap升序|降序排列和按照value進行排序的案例
阿新 • • 發佈:2020-10-19
TreeMap 升序|降序排列
import java.util.Comparator; import java.util.TreeMap; public class Main { public static void main(String[] args) { TreeMap<Integer,Integer> map1 = new TreeMap<Integer,Integer>(); //預設的TreeMap升序排列 TreeMap<Integer,Integer> map2= new TreeMap<Integer,Integer>(new Comparator<Integer>(){ /* * int compare(Object o1,Object o2) 返回一個基本型別的整型, * 返回負數表示:o1 小於o2, * 返回0 表示:o1和o2相等, * 返回正數表示:o1大於o2。 */ public int compare(Integer a,Integer b){ return b-a; } }); map2.put(1,2); map2.put(2,4); map2.put(7,1); map2.put(5,2); System.out.println("Map2="+map2); map1.put(1,2); map1.put(2,4); map1.put(7,1); map1.put(5,2); System.out.println("map1="+map1); } }
TreeMap按照value進行排序
TreeMap底層是根據紅黑樹的資料結構構建的,預設是根據key的自然排序來組織(比如integer的大小,String的字典排序)。所以,TreeMap只能根據key來排序,是不能根據value來排序的(否則key來排序根本就不能形成TreeMap)。
今天有個需求,就是要根據treeMap中的value排序。所以網上看了一下,大致的思路是把TreeMap的EntrySet轉換成list,然後使用Collections.sor排序。
程式碼:
public static void sortByValue() { Map<String,String> map = new TreeMap<String,String>(); map.put("a","dddd"); map.put("d","aaaa"); map.put("b","cccc"); map.put("c","bbbb"); List<Entry<String,String>> list = new ArrayList<Entry<String,String>>(map.entrySet()); Collections.sort(list,new Comparator<Map.Entry<String,String>>() { //升序排序 public int compare(Entry<String,String> o1,Entry<String,String> o2) { return o1.getValue().compareTo(o2.getValue()); } }); for (Entry<String,String> e: list) { System.out.println(e.getKey()+":"+e.getValue()); } }
補充知識:使用比較器對Treemap按照value進行排序
使用比較器對Treemap按照value進行排序(value值只有是string型別時才適用)
有時我們需要根據TreeMap的value來進行排序。對value排序我們就需要藉助於Collections的sort(List list,Comparator
public class MapSortDemo { public static void main(String[] args) { Map<String,String>(); map.put("KFC","kfc"); map.put("WNBA","wnba"); map.put("NBA","nba"); map.put("CBA","cba"); Map<String,String> resultMap = sortMapByKey(map); //按Key進行排序 // Map<String,String> resultMap = sortMapByValue(map); //按Value進行排序 for (Map.Entry<String,String> entry : resultMap.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); } } /** * 使用 Map按value進行排序 * @param map * @return */ public static Map<String,String> sortMapByValue(Map<String,String> oriMap) { if (oriMap == null || oriMap.isEmpty()) { return null; } Map<String,String> sortedMap = new LinkedHashMap<String,String>(); List<Map.Entry<String,String>> entryList = new ArrayList<Map.Entry<String,String>>( oriMap.entrySet()); Collections.sort(entryList,new MapValueComparator()); Iterator<Map.Entry<String,String>> iter = entryList.iterator(); Map.Entry<String,String> tmpEntry = null; while (iter.hasNext()) { tmpEntry = iter.next(); sortedMap.put(tmpEntry.getKey(),tmpEntry.getValue()); } return sortedMap; } }
//比較器 class MapValueComparator implements Comparator<Map.Entry<String,String>> { @Override public int compare(Entry<String,String> me1,String> me2) { return me1.getValue().compareTo(me2.getValue()); } }
方式二
public class TreeMapTest { public static void main(String[] args) { Map<String,"ddddd"); map.put("c","bbbbb"); map.put("d","aaaaa"); map.put("b","ccccc"); //這裡將map.entrySet()轉換成list List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet()); //然後通過比較器來實現排序 Collections.sort(list,String> o2) { return o1.getValue().compareTo(o2.getValue()); } }); for(Map.Entry<String,String> mapping:list){ System.out.println(mapping.getKey()+":"+mapping.getValue()); } } }
執行結果如下:
d:aaaaa
c:bbbbb
b:ccccc
a:ddddd
以上這篇Java TreeMap升序|降序排列和按照value進行排序的案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。