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

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

TreeMap默认按key进行升序排序,如果想改变默认的顺序,可以使用比较器:

  1. Map<String,String> map = new TreeMap<String,String>(new Comparator<String>(){
  2. public int compare(String obj1,String obj2){
  3.   //降序排序
  4.       return obj2.compareTo(obj1); 
       } 
    });

  5. map.put("month", "The month");
  6. map.put("bread", "The bread");
  7. map.put("attack", "The attack");
  8.  
  9. Set<String> keySet = map.keySet();
  10. Iterator<String> iter = keySet.iterator();
  11. while(iter.hasNext()){
  12. String key = iter.next();
  13. System.out.println(key+":"+map.get(key));
  14. }

如果要对TreeMap按照value的值进行排序,或者对HashMap,Hashtable,LinkedHashMap进行排序,则可以使用Map.Entry<K,V>接口结合List实现:

eg.1 对TreeMap按照value值升序:

  1. List<Map.Entry<String,String>> mappingList = null;
  2. Map<String,String> map = new TreeMap<String,String>();
  3. map.put("aaaa", "month");
  4. map.put("bbbb", "bread");
  5. map.put("ccccc", "attack");
  6.  
  7. //通过ArrayList构造函数把map.entrySet()转换成list
  8. mappingList = new ArrayList<Map.Entry<String,String>>(map.entrySet());
  9. //通过比较器实现比较排序
  10. Collections.sort(mappingList, new Comparator<Map.Entry<String,String>>(){
  11.   public int compare(Map.Entry<String,String> mapping1,Map.Entry<String,String> mapping2){
  12.   return mapping1.getValue().compareTo(mapping2.getValue());
  13. }
  14. });
  15.  
  16. for(Map.Entry<String,String> mapping:mappingList){
  17. System.out.println(mapping.getKey()+":"+mapping.getValue());
  18. }

eg.2 对HashMap(或Hashtable,LinkedHashMap)按照key的值升序:

  1. List<Map.Entry<String,String>> mappingList = null;
  2. Map<String,String> map = new HashMap<String,String>();
  3. map.put("month", "month");
  4. map.put("bread", "bread");
  5. map.put("attack", "attack");
  6.  
  7. //通过ArrayList构造函数把map.entrySet()转换成list
  8. mappingList = new ArrayList<Map.Entry<String,String>>(map.entrySet());
  9. //通过比较器实现比较排序
  10. Collections.sort(mappingList, new Comparator<Map.Entry<String,String>>(){
  11.   public int compare(Map.Entry<String,String> mapping1,Map.Entry<String,String> mapping2){
  12.   return mapping1.getKey().compareTo(mapping2.getKey());
  13. }
  14. });
  15.  
  16. for(Map.Entry<String,String> mapping:mappingList){
  17. System.out.println(mapping.getKey()+":"+mapping.getValue());
  18. }

Map排序的更多相关文章

  1. Java Map排序

    Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value). 1.按键排序 jdk内置的java.util包下的Tr ...

  2. C++ map排序(按照value值排序)_glp_hit_新浪博客

    C++ map排序(按照value值排序)_glp_hit_新浪博客     C++ map排序(按照value值排序)    (2012-07-12 14:19:51)    转载▼    标签:  ...

  3. STL容器——对map排序

    STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序 ,和输入 ...

  4. Java | Map排序,工具类改进

    package util; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; ...

  5. Map排序——按key排序,按value排序

    注:转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5959279.html 上一篇博文谈到了集合类的自定义排序方式,那么进一步扩展开来,与集合同等重要的Map有 ...

  6. Map排序(按key/按value)

    package com.abc.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Collecti ...

  7. Map 排序

    /** * 通过map 的 value 排序,并返回排序后的第一个条目 * * @param m 待排序集合 * @param desc true:降序排序,false:升序排序 * @return ...

  8. stl之map 排序

    排序问题,STL中默认是采用小于号来排序的,因为设置int等类型做key,它本身支持小于号运算,在一些特殊情况,比如关键字是一个结构体,涉及到排序就会出现问题,因为它没有小于号操作,insert等函数 ...

  9. java 对map排序

    public static Map<String, String> sortMapByKey(Map<String, String> map) { if (map == nul ...

随机推荐

  1. svn检出的时候报 Unable to connect to a repository at URL错误(摘自CSDN)

    背景:1.         SVN服务器:VisualSVN-Server-2.5.5: 2. SVN客户端:TortoiseSVN-1.7.6.22632-x64-svn-1.7.4.msi: 在S ...

  2. QuartusII Design partion and logic lock

    Design partion Design partion常用于“增益变量(QIC)”,通过Design Partition对子模块进行“逻辑分区”,在Design Partition Window中 ...

  3. Linux 基础命令

    man      帮助命令   命令 --help   命令的简单帮助 help      命令的帮助(bash的内置命令) mkdir    创建目录  如makdir /data mkdir   ...

  4. jsp 头像上传显示部分代码实现

    <%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> <% ...

  5. html页面读取PDF小案例

    html页面 引用<script src="js/pdfobject.js" type="text/javascript" charset="u ...

  6. 简单的C语言文法

    <程序>→<外部声明>|<程序><外部声明> <外部声明>→<函数定义>|<声明> <函数定义>→< ...

  7. 《转载》Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解

    引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用: 简介: han ...

  8. GLUT的简洁OO封装

    毕业设计用到了OpenGL,由于不会用MFC和Win32API做窗口程序:自然选用了GLUT.GLUT很好用,就是每次写一堆Init,注册callback,觉得有点恶心,于是对他做了简单的OO封装.记 ...

  9. css3中变形函数(同样是对元素来说的)和元素通过改变自身属性达到动画效果

    /*对元素进行改变(移动.变形.伸缩.扭曲)*/ .wrapper{ margin:100px 100px auto auto; width:300px; height:200px; border:2 ...

  10. [Sass]不同样式风格的输出方法

    [Sass]不同样式风格的输出方法 众所周知,每个人编写的 CSS 样式风格都不一样,有的喜欢将所有样式代码都写在同一行,而有的喜欢将样式分行书写.在 Sass 中编译出来的样式风格也可以按不同的样式 ...