zoukankan      html  css  js  c++  java
  • Java--HashMap排序

     1 package connection;
     2 
     3 import java.util.Collections;
     4 import java.util.Comparator;
     5 import java.util.HashMap;
     6 import java.util.LinkedHashMap;
     7 import java.util.LinkedList;
     8 import java.util.List;
     9 import java.util.Map;
    10 import java.util.Map.Entry;
    11 
    12 
    13 public class Test {
    14     
    15     public static void main(String[] args) {
    16         Map<String, String> userMap = new HashMap<String, String>();
    17         userMap.put("cn-1410165inv", "E141@0165#inv");
    18         userMap.put("cn-3330147inv", "E333@0147#inv");
    19         userMap.put("cn-1410165invkio", "J02amN$8");
    20         userMap.put("cn-1410165invrob", "U1SzpU+m");
    21         userMap.put("cn-3330147invkio", "J6]bJK,c");
    22         userMap.put("cn-3330147invrob", "W0zr%Y,q");
    23         
    24         for(Map.Entry<String, String> s : userMap.entrySet()) {
    25             System.out.println(s.getKey() + "    " + s.getValue());
    26         }
    27         
    28         
    29         List<Map.Entry<String, String>> sortList = new LinkedList<Map.Entry<String,String>>(userMap.entrySet());
    30         Collections.sort(sortList, new Comparator<Map.Entry<String, String>>() {
    31 
    32             @Override
    33             public int compare(Entry<String, String> o1, Entry<String, String> o2) {
    34                 String suffix1 = o1.getKey().split("-\d+")[1];
    35                 String suffix2 = o2.getKey().split("-\d+")[1];
    36                 int len1 = suffix1.length();
    37                 int len2  = suffix2.length();
    38                 if(len1 != len2) {
    39                     return len1-len2;
    40                 }
    41                 int min = len1>=len2?len2:len1;
    42                 for(int i=0; i<min; i++) {
    43                     String c1 = suffix1.substring(i, i+1);
    44                     String c2 = suffix2.substring(i, i+1);
    45                     if(c1.toCharArray()[0] - c2.toCharArray()[0] == 0) {
    46                         continue;
    47                     } else {
    48                         return c1.toCharArray()[0] - c2.toCharArray()[0];
    49                     }
    50                 }
    51                 //continue
    52                 len1 = o1.getKey().length();
    53                 len2  = o2.getKey().length();
    54                 if(len1 != len2) {
    55                     return len1-len2;
    56                 }
    57                 min = len1>=len2?len2:len1;
    58                 for(int i=0; i<min; i++) {
    59                     String c1 = o1.getKey().substring(i, i+1);
    60                     String c2 = o2.getKey().substring(i, i+1);
    61                     if(c1.toCharArray()[0] - c2.toCharArray()[0] == 0) {
    62                         continue;
    63                     } else {
    64                         return c1.toCharArray()[0] - c2.toCharArray()[0];
    65                     }
    66                 }
    67                 return 0;
    68             }
    69         });
    70         
    71         System.out.println("--------------------------------------");
    72         Map<String, String> sortMap = new LinkedHashMap<String, String>(); 
    73         for(Entry<String, String> entry: sortList) { 
    74             sortMap.put(entry.getKey(), entry.getValue()); 
    75         } 
    76         for(Map.Entry<String, String> s : sortMap.entrySet()) {
    77             System.out.println(s.getKey() + "    " + s.getValue());
    78         }
    79         
    80     }
    81 
    82 }

    颜色区域是关键代码。

  • 相关阅读:
    用超穷归纳证明极大理想定理
    [shell]计算未知个数数据的平均值
    C中的野指针—如何避免
    [C#学习笔记02]理解值和引用
    vim编辑器的配置让你的代码更加易读
    mipslinuxgcc交叉编译工具链搭建小结
    Ubuntu 9.10下KScope的安装
    [uC/OSII]基本操作:新建任务,分配信号量
    基于Philips MF RC522的ISO14443A标准卡读写
    Git常用命令 shuo
  • 原文地址:https://www.cnblogs.com/microcat/p/6343518.html
Copyright © 2011-2022 走看看