`
geshenyi
  • 浏览: 98048 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java HashMap和TreeMap的排序问题总结

    博客分类:
  • J2SE
阅读更多
Map存储的是key->value的值对,key的值是唯一的,而value的值可以重复。通常使用的是HashMap或TreeMap,如果考虑性能,使用HashMap。TreeMap使用红黑树实现,保留有key值顺序性,会自动按照key值排序。

默认是按照key值的升序排序,key值必须实现 Comparator接口。如果希望按找一定规则排序,则需要重新定义compare函数。

如:
   TreeMap hm = new TreeMap<String, String>(new Comparator() { 
               public int compare(Object o1, Object o2) { 
                      //如果有空值,直接返回0 
                      if (o1 == null || o2 == null) 
                          return 0;  
                     
                     return String.valueOf(o1).compareTo(String.valueOf(o2)); 
               } 
      }); 


对于处理有中文排序的问题
TreeMap hm = new TreeMap<String, String>(new Comparator() { 
          public int compare(Object o1, Object o2) { 
               //如果有空值,直接返回0 
                if (o1 == null || o2 == null) 
                      return 0;  
                     
              CollationKey ck1 = collator.getCollationKey(String.valueOf(o1)); 
              CollationKey ck2 = collator.getCollationKey(String.valueOf(o2)); 
              return ck1.compareTo(ck2);               
        } 
      }); 


备注: CollationKey:CollationKey 表示遵守特定 Collator 对象规则的 String。
比较两个CollationKey 将返回它们所表示的 String 的相对顺序。使用 CollationKey 来比较 String 通常比使用 Collator.compare 更快。因此,当必须多次比较 String 时 (例如,对一个 String 列表进行排序),使用 CollationKey 会更高效。

如果想按照value排序或者是对HashMap中的key或value排序则可以如下:

List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(m.entrySet());
			Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
				public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2){
					return o2.getValue()-o1.getValue();
				}		
			});


获取Map.Entry成为表,然后定义comparator进行自定义的排序。

分享到:
评论

相关推荐

    java-hashmap:Java HashMap的插图

    Java HashMap的插图 Java HashMap ...插图7:使用TreeMap对未排序的HashMap进行排序 关于项目 该项目包括样本NetBeans项目,该项目说明了Java HashMap类。 关于开发商 示例NetBeans项目作为一个示例,

    java实现的map排序

    HashMap里面的元素是无序的,要进行排序的话只能是用TreeMap和SortedMap,java实现的map排序

    Java Map 按照Value排序的实现方法

    Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。这篇文章主要介绍了Java Map 按照Value排序的实现方法,需要的朋友可以参考下

    java map实例,排序

    java map排序,hashmap,linkedmap,treemap,hashtable

    Java 集合方面的面试题

    HashMap 和 TreeMap 有什么区别? 什么是迭代器?如何使用它来遍历集合? 什么是 fail-fast 机制? 如何使用 Collections 类对集合进行排序? 什么是 Comparable 和 Comparator 接口?它们有什么区别? 如何使用 ...

    java中set、list和map的使用方法实例

    // java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器...另包含一篇网文:在java中使用TreeMap进行中文排序

    java jdk实列宝典 光盘源代码

    java为数据结构中的映射定义一个接口java.util.Map,有四个实现类HashMap Hashtable LinkedHashMap TreeMap用法和区别;对Map排序; 5字符串 使用String;判断一个字符串是否是合法的java标识符;使用StringBuffer;...

    疯狂JAVA讲义

    7.6.2 SortedMap接口和TreeMap实现类 276 7.6.3 WeakHashMap实现类 279 7.6.4 IdentityHashMap实现类 280 7.6.5 EnumMap实现类 281 7.7 HashSet和HashMap的性能选项 282 7.8 操作集合的工具类:Collections 283...

    java遍历特例

    java Map 遍历方法 Map map = new HashMap(); Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); ...

    java基础案例与开发详解案例源码全

    2.4 Java类库组织结构和文档27 2.5 Java虚拟机简介28 2.6 Java技术两种核心运行机制29 2.7 上机练习30 第3章 3.1 变量32 3.1.1 什么是变量32 3.1.2 为什么需要变量32 3.1.3 变量的声明和赋值33 3.1.4 变量应用实例33...

    程序员需要经常刷题吗-simple-java-zh-CN:SimpleJava是Java常见问题的集合。中文翻译

    常见问题的集合。中文翻译 ##1。 字符串和数组字符串和数组 字符串是通过引用传递的吗? ##2。 常用方法 比较器与可比较 hashCode() 和 equals() 之间的契约 Java是按引用还是按值传递对象? 迭代与递归 ##3。 类和...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    java编程练习题

    要求:对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列 3、使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8...

    21天学通Java-由浅入深

    ”:非运算符 54 3.4.4 逻辑运算符总结 54 3.5 三元运算符 55 3.6 位运算符 55 3.6.1 “&”:按位与运算符 56 3.6.2 “|”:按位或运算符 56 3.6.3 “^”:按位异或运算符 57 3.7 位移运算符 57 3.7.1 “&gt;&gt;”:带...

    Java开发技术大全 电子版

    第7章Java的输入和输出237 7.1文件和输入输出流237 7.2InputStream类和OutputStream类的使用238 7.2.1InputStream中的方法238 7.2.2OutputStream中的方法239 7.2.3文件输入流FileInputStream239 7.2.4文件输出...

    Java容器.xmind

    对键进行排序 HashTable 标记: class Properties 标记: class 线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。 Collections 标记: 均以synchronized实现, 性能没用提高 synchronizedCollection...

    突破程序员基本功的16课.part2

    3.1.2 HashMap和HashSet 3.1.3 TreeMap和TreeSet 3.2 Map和List 3.2.1 Map的values()方法 3.2.2 Map和List的关系 3.3 ArrayList和LinkedList 3.3.1 Vector和ArrayList的区别 3.3.2 ArrayList和LinkedList...

    berkeley-cs61b:CS61BSpring讲义,2019年

    伯克利CS61B CS61B数据结构,2019年Spring 讲师:Josh Hug 演讲笔记 现实世界中的编码,评论 ADT,集合,地图,BST B树(2-3。2-3-4树) 红黑树 散列 ...实验11:合并排序和快速排序 实验12:P

Global site tag (gtag.js) - Google Analytics