Map的特性:
Map內涵资料是Key -> Value的架构集合体,而Key是属于Set的架构集合体,也就是说Key的值是唯一的,而Value的值可以重复。一般常用的物件是HashMap或TreeMap,如果考虑效能的话,建议使用HashMap,如果希望Key值有顺序性,就使用TreeMap吧!所以Map的集合体,资料的摆放方式是沒有顺序性的,我们需要借助有顺序性的集合体List来帮忙。
1.当value值为整数类型时。实例如下所示:
Map<String , Integer> mapInteger = new HashMap<String , Integer>();
mapInteger.put("A", 98);
mapInteger.put("B", 50);
mapInteger.put("C", 76);
mapInteger.put("D", 23);
mapInteger.put("E", 85);
map中对整数value值排序操作如下:
/*
* map中的value值为double类型
*/
public static void mapSortInteger(Map<String , Integer> map){
List<Map.Entry<String, Integer>> listData = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
System.out.println("排序前listData:");
System.out.println(listData);
//排序
Collections.sort(listData, new Comparator<Map.Entry<String, Integer>>(){
public int compare(Map.Entry<String,Integer > o1, Map.Entry<String, Integer> o2){
return (o2.getValue() - o1.getValue());
}
}
);
System.out.println("排序后listData:");
System.out.println(listData);
}
输出结果为:
========整型数据操作========
排序前listData:
[D=23, E=85, A=98, B=50, C=76]
排序后listData:
[A=98, E=85, C=76, B=50, D=23]
2.1.当value值为双精度浮点类型时。实例如下所示:
Map<String, Double> mapDouble = new HashMap<String, Double>();
mapDouble.put("F", 98.555);
mapDouble.put("G", 89.123);
mapDouble.put("H", 108.564);
mapDouble.put("I", 54.129);
map中对Double类型的value排序操作如下:
/**
* map中的value值为double类型
*/
public static void mapSortDouble(Map<String, Double> map){
List<Map.Entry<String, Double>> listData = new ArrayList<Map.Entry<String, Double>>(map.entrySet());
System.out.println("排序前listData:");
System.out.println(listData);
//排序
Collections.sort(listData, new Comparator<Map.Entry<String, Double>>(){
public int compare(Map.Entry<String,Double > o1, Map.Entry<String, Double> o2){
return (int)((o2.getValue() - o1.getValue()) * 1000);
}
}
);
System.out.println("排序后listData:");
System.out.println(listData);
}
输出结果为:
========双精度数据操作========
排序前listData:
[F=98.555, G=89.123, H=108.564, I=54.129]
排序后listData:
[H=108.564, F=98.555, G=89.123, I=54.129]
source code:
package mapsrc;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MapSortByValue {
public static void main(String [] args){
Map<String , Integer> mapInteger = new HashMap<String , Integer>();
mapInteger.put("A", 98);
mapInteger.put("B", 50);
mapInteger.put("C", 76);
mapInteger.put("D", 23);
mapInteger.put("E", 85);
Map<String, Double> mapDouble = new HashMap<String, Double>();
mapDouble.put("F", 98.555);
mapDouble.put("G", 89.123);
mapDouble.put("H", 108.564);
mapDouble.put("I", 54.129);
System.out.println(" ========整型数据操作========");
MapSortByValue.mapSortInteger(mapInteger);
System.out.println(" ========双精度数据操作========");
MapSortByValue.mapSortDouble(mapDouble);
}
/*
* map中的value值为double类型
*/
public static void mapSortInteger(Map<String , Integer> map){
List<Map.Entry<String, Integer>> listData = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
System.out.println("排序前listData:");
System.out.println(listData);
//排序
Collections.sort(listData, new Comparator<Map.Entry<String, Integer>>(){
public int compare(Map.Entry<String,Integer > o1, Map.Entry<String, Integer> o2){
return (o2.getValue() - o1.getValue());
}
}
);
System.out.println("排序后listData:");
System.out.println(listData);
}
/**
* map中的value值为double类型
*/
public static void mapSortDouble(Map<String, Double> map){
List<Map.Entry<String, Double>> listData = new ArrayList<Map.Entry<String, Double>>(map.entrySet());
System.out.println("排序前listData:");
System.out.println(listData);
//排序
Collections.sort(listData, new Comparator<Map.Entry<String, Double>>(){
public int compare(Map.Entry<String,Double > o1, Map.Entry<String, Double> o2){
return (int)((o2.getValue() - o1.getValue()) * 1000);
}
}
);
System.out.println("排序后listData:");
System.out.println(listData);
}
}
output:
========整型数据操作========
排序前listData:
[D=23, E=85, A=98, B=50, C=76]
排序后listData:
[A=98, E=85, C=76, B=50, D=23]
========双精度数据操作========
排序前listData:
[F=98.555, G=89.123, H=108.564, I=54.129]
排序后listData:
[H=108.564, F=98.555, G=89.123, I=54.129]