java.util.map中对value值排序 (一)

2014-11-24 11:30:12 · 作者: · 浏览: 30

Map的特性:
Map 涵资料是Key -> Value的架构集合体,而Key是属于Set的架构集合体,也就是说Key的值是唯一的,而Value的值可以重复。一般常用的物件是HashMap或TreeMap,如果考虑效能的话,建议使用HashMap,如果希望Key值有顺序性,就使用TreeMap吧!所以Map的集合体,资料的摆放方式是 有顺序性的,我们需要借助有顺序性的集合体List来帮忙。


1.当value值为整数类型时。实例如下所示:

Map mapInteger = new HashMap();
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 map){
List> listData = new ArrayList>(map.entrySet());
System.out.println("排序前listData:");
System.out.println(listData);
//排序
Collections.sort(listData, new Comparator>(){
public int compare(Map.Entry o1, Map.Entry 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 mapDouble = new HashMap();
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 map){
List> listData = new ArrayList>(map.entrySet());
System.out.println("排序前listData:");
System.out.println(listData);
//排序
Collections.sort(listData, new Comparator>(){
public int compare(Map.Entry o1, Map.Entry 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 mapInteger = new HashMap();
mapInteger.put("A", 98);
mapInteger.put("B", 50);
mapInteger.put("C", 76);
mapInteger.put("D", 23);
mapInteger.put("E", 85);

Map mapDouble = new HashMap();
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 map){
List> listData = new ArrayList>(map.entrySet());
System.out.println("排序前listData:");
System.out.println(listData);
//排序
Collections.sort(listData, new Comparator>(){
public int compare(Map.Entry o1, Map.Entry o2){
return (o2.getValue() - o1.getValue());
}
}
);
System.out.println("排序后listData:");
System.out.println(listData);
}

/**
* map中的value值为double类型
*/
public static void mapSortDouble(Map map){
List> listData = new ArrayList>(map.entrySet());
System.out.println("排序前listData:");
System.out.println(listData);
//排序
Collections.sort(listData, new Comparator>(){
public int compare(Map.Entry o1, Map.Entry o2){
return (int)((o2.getValue() - o1.getValue()) * 1000);
}
}
);
System.out.println("排序后listData:");
System.out.println(listData);
}
}

outpu