今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序。

一、简单介绍Map

在讲解Map排序之前,我们先来稍微了解下map。map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):

HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。

TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。

Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。

LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。

二、Map排序

TreeMap

TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。

Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare (T o1,To2) 方法即可实现排序,该方法主要是根据第一个参数o1,小于、等于或者大于o2分别返回负整数、0或者正整数。如下:

public class TreeMapTest {public static void main(String[] args) {Map<String, String> map = new TreeMap<String, String>(new Comparator<String>() {public int compare(String obj1, String obj2) {// 降序排序return obj2.compareTo(obj1);}});map.put("c", "ccccc");map.put("a", "aaaaa");map.put("b", "bbbbb");map.put("d", "ddddd");Set<String> keySet = map.keySet();Iterator<String> iter = keySet.iterator();while (iter.hasNext()) {String key = iter.next();System.out.println(key + ":" + map.get(key));}}
}

运行结果如下:

d:ddddd 
c:ccccc 
b:bbbbb 
a:aaaaa

上面例子是对根据TreeMap的key值来进行排序的,但是有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要借助于Collections的sort(List<T> list, Comparator<? super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较。如下:

public class TreeMapTest {public static void main(String[] args) {Map<String, String> map = new TreeMap<String, String>();map.put("d", "ddddd");map.put("b", "bbbbb");map.put("a", "aaaaa");map.put("c", "ccccc");//这里将map.entrySet()转换成listList<Map.Entry<String,String>> list = new ArrayList<Map.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(Map.Entry<String,String> mapping:list){ System.out.println(mapping.getKey()+":"+mapping.getValue()); } }
}

运行结果

a:aaaaa 
b:bbbbb 
c:ccccc 
d:ddddd

HashMap

我们都是HashMap的值是没有顺序的,他是按照key的HashCode来实现的。对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序,我们一样的也可以实现HashMap的排序。

public class HashMapTest {public static void main(String[] args) {Map<String, String> map = new HashMap<String, String>();map.put("c", "ccccc");map.put("a", "aaaaa");map.put("b", "bbbbb");map.put("d", "ddddd");List<Map.Entry<String,String>> list = new ArrayList<Map.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(Map.Entry<String,String> mapping:list){ System.out.println(mapping.getKey()+":"+mapping.getValue()); } }
}

运行结果

a:aaaaa 
b:bbbbb 
c:ccccc 
d:ddddd

from: http://www.importnew.com/20703.html?utm_source=tuicool&utm_medium=referral

原文出处: chenssy

对map集合进行排序相关推荐

  1. java map集合排序的_Java对Map集合进行排序

    Java对Map集合进行排序 实现 Comparator 接口,重写compare方法,完成自定义排序 int compare(Object o1, Object o2) 返回一个基本类型的整型 如果 ...

  2. c++ map 自定义排序_Java学习笔记:Map集合介绍

    在介绍它之前先来看看再API文档中是如何介绍它的,看图片: 由图片可以看出,Map属于双列集合,每次可以添加一对数据,并且这两个数据具有映射关系. 单列集合和双列集合区别 一.Map继承体系 1.Ha ...

  3. java8新特性:对map集合排序

    一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map,map是键值对的集合接口,它的实现类主要包括:HashMap, TreeMap, Hashtable以及LinkedHashMap等 ...

  4. Java集合或Map中元素排序及过滤

    在Java中,对集合或Map中元素进行排序或过滤是一个频繁操作.这里以List为例介绍下如何在集合中实现元素的排序和过滤功能.对于非List元素(Set.Map)等,一方面可以参考List使用类似的方 ...

  5. java对list中map集合中某个字段排序

    java对list中map集合中某个字段排序 适用于字符串排序,数字对比不可用,以下示例,当把sort的值改为74,66,142时排序不对看示例2 示例1 List<Map<String, ...

  6. java8新特性:对map集合排序,根据key或者value操作排序(升序、降序)

    java8新特性:对map集合排序,根据key或者value操作排序(升序.降序) 直接上代码: package com.drew.test; import java.util.List; impor ...

  7. Java8集合List排序、筛选、求和、求最大值、平均值、List转Map

    Java8集合List排序.筛选 1. List 元素有序 元素可重复 1.1 ArrayList 动态数组实现 查询快 增删慢(末尾处也快) 1.2 LinkedList 链表实现 查询慢 增删快 ...

  8. Map集合的按时间排序方法

    Map集合的按时间排序方法 一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map.map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及Li ...

  9. Java基础学习系列--(六)【Map集合,HashMapTreeMap,斗地主、图书管理系统,排序算法】

    第一章 Map集合 1.1 概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存 ...

最新文章

  1. Asp.net Mvc视频教程 页面传值基础(get/post/UpdateModel)
  2. fatal error: hdf5.h: No such file or directory
  3. Java中的Memento设计模式-示例教程
  4. 14-微信小程序商城 产品详情页布局(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)
  5. 爆文标题生成器,10W+自媒体人的福音
  6. 中值滤波器处理椒盐噪声
  7. GitLab实现CICD自动化部署
  8. 并查集:CDOJ1593-老司机破阵 (假的并查集拆除)
  9. Android G711编解码
  10. 用Matlab的.m脚本文件处理实验室数据
  11. 使用Excel制作一个动态计划表
  12. 装逼技巧:程序员如何用代码证明自己牛逼!
  13. 重学前端-总结:前言,从今天起,重新理解前端
  14. 笔记本完全卸载自带键盘
  15. AF染料试剂Alexa fluor 680 PEG Biotin,AF680 PEG Biotin,荧光强度稳定利于多种荧光标记
  16. ubunto16.04 安装配置
  17. Python numpy求众数
  18. 《破茧成蝶——用户体验设计师的成长之路》一1.4 用户体验设计的精益之道...
  19. qq头像在java程序_根据QQ头像hash分析QQ号(html版)
  20. 三相电压型PWM整流器两种控制策略的比较

热门文章

  1. 基于Java语言构建区块链(五)—— 地址(钱包)
  2. 技术有时间衰减因子.
  3. [推荐算法]ItemCF,基于物品的协同过滤算法
  4. 史蒂夫·乔布斯很懂团队建设
  5. 白话Elasticsearch50-深入聚合数据分析之doc values机制
  6. php制作标签,ThinkPHP标签制作教程
  7. SQL发HTML页脚怎么写,SQL Server中发送HTML格式邮件的方法
  8. 学习笔记——pygame最常用的15个模块
  9. 什么是分布式事务以及有哪些解决方案?
  10. Java设计模式(二) -- 单例模式