Java Map排序
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。
1、按键排序
jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,向其构造方法 TreeMap(Comparator<? super K> comparator) 传入我们自定义的比较器即可实现按键排序。
实现代码
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
 | 
public class MapSortDemo {    public static void main(String[] args) {        Map<String, String> map = new TreeMap<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进行排序        for (Map.Entry<String, String> entry : resultMap.entrySet()) {            System.out.println(entry.getKey() + " " + entry.getValue());        }    }         /**     * 使用 Map按key进行排序     * @param map     * @return     */    public static Map<String, String> sortMapByKey(Map<String, String> map) {        if (map == null || map.isEmpty()) {            return null;        }        Map<String, String> sortMap = new TreeMap<String, String>(                new MapKeyComparator());        sortMap.putAll(map);        return sortMap;    }} | 
比较器类
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
class MapKeyComparator implements Comparator<String>{    @Override    public int compare(String str1, String str2) {                 return str1.compareTo(str2);    }} | 
2、按值排序
按值排序就相对麻烦些了,貌似没有直接可用的数据结构能处理类似需求,需要我们自己转换一下。
Map本身按值排序是很有意义的,很多场合下都会遇到类似需求,可以认为其值是定义的某种规则或者权重。
原理:将待排序Map中的所有元素置于一个列表中,接着使用Collections的一个静态方法 sort(List<T> list, Comparator<? super T> c) 
来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次装入Map,为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型。
实现代码
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
 | 
public class MapSortDemo {    public static void main(String[] args) {        Map<String, String> map = new TreeMap<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;    }} | 
比较器类
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
class MapValueComparator implements Comparator<Map.Entry<String, String>> {    @Override    public int compare(Entry<String, String> me1, Entry<String, String> me2) {        return me1.getValue().compareTo(me2.getValue());    }} | 
Java Map排序的更多相关文章
- Java | Map排序,工具类改进
		
package util; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; ...
 - Java Map 排序
		
1. 按照key值排序 对于java中Map的排序,有排序Map,比如TreeMap,对于这个Map,首先只能按照键排序,其次再put和remove的时候由于需要排序,性能上会有所牺牲. 这种方案,使 ...
 - Java Map按键(Key)排序和按值(Value)排序
		
Map排序的方式有很多种,两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value).1.按键排序jdk内置的java.util包下的TreeMap<K,V ...
 - Java Map 按Key排序和按Value排序
		
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value). 1.按键排序 jdk内置的java.util包下的Tr ...
 - java Map 之 排序(key,value)
		
一:起因: (1)现实中须要Map容器进行排序的情况非常多非常多:由于Map<key,value>键值对的存储结构特别是HashMap的结构是非常优秀的,数据存储就难免对其进行排序: (2 ...
 - Java map 详解 - 用法、遍历、排序、常用API等
		
尊重原创: http://www.cnblogs.com/lzq198754/p/5780165.html 概要: java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 L ...
 - java map遍历、排序,根据value获取key
		
Map 四种遍历: Map<String,String> map = new HashMap<String, String>(); map.put("one" ...
 - java Map常用方法封装
		
java Map常用方法封装 CreationTime--2018年7月16日15点59分 Author:Marydon 1.准备工作 import java.util.HashMap; impo ...
 - BAT面试笔试33题:JavaList、Java Map等经典面试题!答案汇总!
		
JavaList面试题汇总 1.List集合:ArrayList.LinkedList.Vector等. 2.Vector是List接口下线程安全的集合. 3.List是有序的. 4.ArrayLis ...
 
随机推荐
- [DHCP服务]——一个验证DHCP原理实验(VMware)
			
大致实验拓扑图 DHCP Server端的配置 1. 安装DHCP # yum -y install dhcp 2. 拷贝配置文件 # /dhcpd.conf.sample /etc/dhcp/dhc ...
 - 使用git客户端获取shiro
			
1.进入下载的目标文件夹右键( Git Bash Here )
 - asdoc 档案
			
1.asdoc air项目会出现无法找到NativeApplication等错误 解决办法:add args -load-config ....../frameworks/air-config.x ...
 - M1事后分析报告(Postmortem Report)
			
M1事后分析报告(Postmortem Report) 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们项目组所开发的软件为一个基于Andro ...
 - NABC的特点分析
			
题目: 请把采用卡片分类的方法讨论你们的团队开发项目特点,再按照 NABC 的框架分析每个特点. 每一个组员针对其中的一个特点将NABC的分析结果发表博 ...
 - canvas实现跟随鼠标旋转的箭头
			
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...
 - android 通过socket获取IP
			
如题<android 通过socket获取IP>: socket.getInetAddress().getHostAddress();
 - VC6.0装了visual assist x回车键不能补全代码的解决方法
			
问题:VC6.0装了visual assist x补全代码具体怎么用? 输入字母后会像输入法那样出现一个菜单 但是怎么选择菜单里面的内容呢? 什么 回车 ...
 - sqlserver2008r2  127.0.0.1 用户sa登录失败 错误18456
			
按照网上的所有方法都试过了,还是不行. 最后,将sa密码重新设置一下,解决问题.
 - transitionend 事件的兼容
			
google :webkitTransitionEnd firefox :transitionend ie : MSTransitionEnd