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 }

颜色区域是关键代码。

原文地址:https://www.cnblogs.com/microcat/p/6343518.html