java.util.map中对value值排序

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]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值