1.HashMap、Hashtable不是有序的;

2.TreeMap和LinkedHashMap是有序的(TreeMap默认 Key 升序,LinkedHashMap则记录了插入顺序)。

今天做统计时需要对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 classTreeMapTest {public static voidmain(String[] args) {

Map map = new TreeMap(new Comparator() {public intcompare(String obj1, String obj2) {//降序排序

returnobj2.compareTo(obj1);

}

});

map.put("c", "ccccc");

map.put("a", "aaaaa");

map.put("b", "bbbbb");

map.put("d", "ddddd");

Set keySet =map.keySet();

Iterator 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 list, Comparator super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较。如下:

public classTreeMapTest {public static voidmain(String[] args) {

Map map = new TreeMap();

map.put("d", "ddddd");

map.put("b", "bbbbb");

map.put("a", "aaaaa");

map.put("c", "ccccc");//这里将map.entrySet()转换成list

List> list = new ArrayList>(map.entrySet());//然后通过比较器来实现排序

Collections.sort(list,new Comparator>() {//升序排序

public int compare(Entryo1,

Entryo2) {returno1.getValue().compareTo(o2.getValue());

}

});for(Map.Entrymapping: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 classHashMapTest {public static voidmain(String[] args) {

Map map = new HashMap();

map.put("c", "ccccc");

map.put("a", "aaaaa");

map.put("b", "bbbbb");

map.put("d", "ddddd");

List> list = new ArrayList>(map.entrySet());

Collections.sort(list,new Comparator>() {//升序排序

public int compare(Entryo1,

Entryo2) {returno1.getValue().compareTo(o2.getValue());

}

});for(Map.Entrymapping:list){

System.out.println(mapping.getKey()+":"+mapping.getValue());

}

}

}

运行结果

a:aaaaa

b:bbbbb

c:ccccc

d:ddddd

java hashmap 无序_Map的有序和无序实现类,与Map的排序相关推荐

  1. HashMap的到底是有序还是无序

    HashMap的到底是有序还是无序 前提 问题背景 HashMap的一些特性 问题分析 结论 再结论 前提 首先说明:HashMap不保证插入顺序,但是循环遍历时,输出顺序是不会改变的. 代码说明: ...

  2. 代码中如何让无序标记的内容并排_英语技术文档中如何正确使用无序列表和有序列表?...

    Foreword 之前跟大家分享过英语技术文档中如何正确使用时态和英语技术文档中如何正确使用人称,这一篇再跟大家分享一下如何正确使用无序列表和有序列表. 其实,在技术文档中,除了无序列表和有序列表,另 ...

  3. java list有序还是无序_java的集合框架

    前言 使用java编程语言的开发人员,在日常开发过程中经常会使用到java的一些集合类,不过这些集合类太多,很多人对它们的特点和使用场景不是特别的了解,通过此文给大家总结一下这方面的知识,方便大家面试 ...

  4. hashmap是有序还是无序_说实话,你要是看完这篇 HashMap ,和面试官扯皮真的就没问题了!

    文章来源:看完这篇 HashMap ,和面试官扯皮就没问题了 原文作者:cxuan 来源平台:微信公众号 (如果你没有时间细抠本文,可以直接看 HashMap 概述,能让你对 HashMap 有个大致 ...

  5. HashMap无序?TreeMap有序?

    今天学习Map集合时书上说HashMap是无序的,TreeMap是有序的(有序无序是针对key的),但是实际去敲的时候发现不是这样,有时HashMap是有序的,有时TreeMap是无序的.于是就做了以 ...

  6. Java集合中有关有序,无序的概念

    有序.无序是指在进行插入操作时,插入位置的顺序性 先插的位置在前,后插的位置在后,则为有序,反之无序 而大家容易混淆的就是排序,排序是指集合内的元素是否按照升序或降序来排序 实现了List接口的集合类 ...

  7. Map的有序和无序实现类,与Map的排序

    Map的有序和无序实现类,与Map的排序 1.HashMap.Hashtable不是有序的: 2.TreeMap和LinkedHashMap是有序的(TreeMap默认 Key 升序,LinkedHa ...

  8. html无序列表斜体,CSS 有序或者无序列表的前面的标记 list-style-type 属性

    例子: ul.none{list-style-type:none} ul.circle {list-style-type:circle} ul.square {list-style-type:squa ...

  9. java创建有序的map代码_java使用HashMap实现斗地主(有序版)

    本文实例为大家分享了java使用HashMap实现斗地主的具体代码,供大家参考,具体内容如下 案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 使用54张牌打乱顺序,三个玩家参与游戏,三人 ...

最新文章

  1. 13.2.9 中间件
  2. Linux下ms软件,在linux下有没有什么软件可以连接windows上的MSSQL SERVER
  3. MySQL JDBC URL各参数详解
  4. 云原生数据库如何打造业务弹性
  5. NOI2015 荷马史诗
  6. Laravel教程 六:表单 Forms
  7. 一个react项目案例01 组件部分
  8. 谈谈对于企业级系统架构的理解
  9. IEC61850——开山篇
  10. 强烈推荐10本程序员必读的书
  11. MySQL中grant之后要跟着flush privileges吗?
  12. 生命在于答疑——git推送本地到库鉴权失败
  13. 远程文件下载/小电影下载
  14. Unity给小鳄鱼洗澡2D流体水实现
  15. Java微信支付开发之查询订单
  16. 盛大啊啊实打实倒萨的a
  17. IE6 遇到bug及解决办法
  18. zencart1.55stripe信用卡内嵌支付获取卡号
  19. 实现财务自由 之 美股上市公司的年报(年度财报)(国内外公司年报20-F,10-k)查阅、下载、以及 翻译中文查阅、下载的方法
  20. 门户通专访月光博客:第一博客是如何打造成的

热门文章

  1. 几维安全:千锤百炼,锻造移动游戏安全防护黄金铠甲
  2. ASP.NET Core 部署到Cont OS 服务器
  3. 如何在思科虚拟PC机信息进行修改
  4. 详解Python正则表达式之: (?Pname…) named group 带命名的组
  5. python学习笔记一:python基础知识
  6. 警告 初始化默认驱动器时出错“找不到运行 Active Directory Web 服务的默认服务器。”...
  7. 使用Unity开发项目的一点经验
  8. 用GibbsLDA做Topic Modeling
  9. 使用java语言操作,如何来实现MySQL中Blob字段的存取
  10. Spring框架(IoC、AOP面向接口切面)