1. package com.abc.test;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Collections;
  6. import java.util.Comparator;
  7. import java.util.HashMap;
  8. import java.util.Iterator;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.Scanner;
  12. import java.util.Set;
  13. import java.util.SortedMap;
  14. import java.util.TreeMap;
  15. import java.util.Map.Entry;
  16.  
  17. /**
  18. * 可能会遇到这样的情况,我可能要对Map<key,value>的集合进行排序,而这种排序又分为两种情况,你可能按key值排序;
  19. * 另外你也可能会遇到按value值进行排序的情况。
  20. * 大家都知道,默认的情况下,TreeMap:是按key升序,进行排序的;LinkedHashMap:是按加入顺序进行排序的
  21. * ;HashMap:内部数值的顺序并不是以存放的先后顺序为主
  22. * ,而是以hash值的顺序为主,其次才是存放的先后顺序。在这里我们只讨论如何实现HashMap的排序。
  23. *
  24. */
  25. @SuppressWarnings("unchecked")
  26. public class MapSortTest {
  27.  
  28. public static void main(String[] args) {
  29. //初始化map
  30. Map<String, Integer> map=getMapInstance();
  31. printMap(map);
  32.  
  33. //选择操作
  34. Scanner input=new Scanner(System.in);
  35. int num=input.nextInt();
  36. switch (num) {
  37. case 0:
  38. System.exit(0);
  39. break;
  40. case 1:
  41. Map<String, Integer> sortMaps = sortMapByKey(map);
  42. printMap(sortMaps);
  43. break;
  44. case 2:
  45. sortMapByValue(map);
  46. break;
  47. case 3:
  48. mapSortByKey(map);
  49. break;
  50. case 4:
  51. mapSortByValue(map);
  52. break;
  53. default:
  54. System.out.println("error input!");
  55. break;
  56. }
  57.  
  58. }
  59.  
  60. public static Map sortMapByKey(Map map) {
  61. Map<Object, Object> mapVK = new TreeMap<Object, Object>(
  62. new Comparator<Object>() {
  63. public int compare(Object obj1, Object obj2) {
  64. String v1 = (String) obj1;
  65. String v2 = (String) obj2;
  66. int s = v2.compareTo(v1);
  67. return s;
  68. }
  69. });
  70. Set col = map.keySet();
  71. Iterator iter = col.iterator();
  72. while (iter.hasNext()) {
  73. String key = (String) iter.next();
  74. Integer value = (Integer) map.get(key);
  75. mapVK.put(key, value);
  76. }
  77. return mapVK;
  78. }
  79.  
  80. public static void sortMapByValue(Map maps) {
  81. List<Map.Entry<String, Integer>> info = new ArrayList<Map.Entry<String, Integer>>(maps.entrySet());
  82. Collections.sort(info, new Comparator<Map.Entry<String, Integer>>() {
  83. public int compare(Map.Entry<String, Integer> obj1,Map.Entry<String, Integer> obj2) {
  84. return obj2.getValue() - obj1.getValue();
  85. }
  86. });
  87. for (int j = 0; j < info.size(); j++) {
  88. System.out.println(info.get(j).getKey() + "------->"+ info.get(j).getValue());
  89. }
  90. }
  91.  
  92. // ====================================================================================
  93. private static SortedMap<String, Integer> mapSortByKey(Map<String, Integer> unsort_map) {
  94. TreeMap<String, Integer> result = new TreeMap<String, Integer>();
  95. Object[] unsort_key = unsort_map.keySet().toArray();
  96. Arrays.sort(unsort_key);
  97. for (int i = 0; i < unsort_key.length; i++) {
  98. result.put(unsort_key[i].toString(), unsort_map.get(unsort_key[i]));
  99. }
  100. return result.tailMap(result.firstKey());
  101. }
  102.  
  103. public static void mapSortByValue(Map map) {
  104. List arrayList = new ArrayList(map.entrySet());
  105. Collections.sort(arrayList,new Comparator(){
  106. @Override
  107. public int compare(Object o1, Object o2) {
  108. Map.Entry obj1 = (Map.Entry)o1;
  109. Map.Entry obj2 = (Map.Entry)o2;
  110. return obj1.getValue().toString().compareTo(obj2.getValue().toString());
  111. }
  112. });
  113. for(Iterator it = arrayList.iterator();it.hasNext();){
  114. Map.Entry entry = (Map.Entry)it.next();
  115. System.out.println(entry.getKey()+":"+entry.getValue());
  116. }
  117. }
  118. public static void abc(Map map){
  119. TreeMap treemap = new TreeMap(map);
  120. }
  121. public static void abcd() {
  122. Map<String, Integer> keyfreqs = new HashMap<String, Integer>();
  123. ArrayList<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(keyfreqs.entrySet());
  124. Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
  125. public int compare(Map.Entry<String, Integer> o1,Map.Entry<String, Integer> o2) {
  126. return (o2.getValue() - o1.getValue());
  127. }
  128. });
  129. for (Entry<String, Integer> e : list) {
  130. System.out.println(e.getKey() + "::::" + e.getValue());
  131. }
  132. }
  133. public static Map getMapInstance(){
  134. Map<String, Integer> map = new HashMap<String, Integer>();
  135. map.put("apple",40);
  136. map.put("boy",30);
  137. map.put("cat",20);
  138. map.put("dog",10);
  139. return map;
  140. }
  141. public static void printMap(Map map){
  142. Iterator i = map.entrySet().iterator();
  143. while (i.hasNext()) {
  144. Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) i.next();
  145. System.out.println(entry.getKey() + ":"+ entry.getValue());
  146. }
  147. System.out.println("========================================================");
  148. }
  149. }

Map排序(按key/按value)的更多相关文章

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

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

  2. C++ STL中Map的按Key排序和按Value排序

    map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进 ...

  3. java Map 之 排序(key,value)

    一:起因: (1)现实中须要Map容器进行排序的情况非常多非常多:由于Map<key,value>键值对的存储结构特别是HashMap的结构是非常优秀的,数据存储就难免对其进行排序: (2 ...

  4. Map排序(按key排序,按value排序)

    主要分两种,按键排序.按值排序. 而且,按key排序主要用于TreeMap,而按value排序则对于Map的子类们都适用. 一.按键排序 按Key排序主要用于TreeMap,可以实现按照Key值的大小 ...

  5. C++ STL中Map的按Key排序跟按Value排序

    C++ STL中Map的按Key排序和按Value排序 map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定 ...

  6. Java Map排序

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

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

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

  8. STL容器——对map排序

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

  9. golang中的slice翻转存在以及map中的key判断

    //slice翻转 func stringReverse(src []string){ if src == nil { panic(fmt.Errorf("the src can't be ...

随机推荐

  1. UnityVS(Visual Studio Tools For Unity)的安装与使用

    首选微软的官方博客地址:http://blogs.msdn.com/b/visualstudio/archive/2014/07/29/visual-studio-tools-for-unity-1- ...

  2. Php-SPL库中的迭代器类详解(转)

    SPL提供了多个迭代器类,分别提供了迭代访问.过滤数据.缓存结果.控制分页等功能.,因为php总是在不断壮大,我尽可能列出SPL中所有的迭代类.下面其中一些迭代器类是需要php5.4,另外一些如Sea ...

  3. oc-15-枚举结构体

    Cat.h #import <Foundation/Foundation.h> // 颜色的枚举 typedef enum{ ColorBlack, ColorYeallow } Colo ...

  4. IIS6_IIS7日志文件位置

    准备统计下页面访问量 查找IIS日志,发现在以前IIS6日志的位置,竟然木有找到日志... 查看下IIS设置,发现IIS7和6的默认日志位置不一样额... IIS 6 Log files locati ...

  5. 浅析SkipList跳跃表原理及代码实现

    本文将总结一种数据结构:跳跃表.前半部分跳跃表性质和操作的介绍直接摘自<让算法的效率跳起来--浅谈“跳跃表”的相关操作及其应用>上海市华东师范大学第二附属中学 魏冉.之后将附上跳跃表的源代 ...

  6. oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT_数据库的几种锁

    问题如下: SQL> conn scott/tiger@vm_databaseConnected to Oracle Database 11g Enterprise Edition Releas ...

  7. js获得控件位置

    网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...

  8. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  9. Hastiness

    Problem Description How many problems did you AC?When you read this problem, don’t hasty and careles ...

  10. TF-IDF算法扫盲2

    TF-IDF算法是一种简单快捷的文档特征词抽取方法,通过统计文档中的词频来对文档进行主题分类.TF-IDF(term frequency–inverse document frequency)是一种统 ...