package connection;

 import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; public class Test { public static void main(String[] args) {
Map<String, String> userMap = new HashMap<String, String>();
userMap.put("cn-1410165inv", "E141@0165#inv");
userMap.put("cn-3330147inv", "E333@0147#inv");
userMap.put("cn-1410165invkio", "J02amN$8");
userMap.put("cn-1410165invrob", "U1SzpU+m");
userMap.put("cn-3330147invkio", "J6]bJK,c");
userMap.put("cn-3330147invrob", "W0zr%Y,q"); for(Map.Entry<String, String> s : userMap.entrySet()) {
System.out.println(s.getKey() + " " + s.getValue());
} List<Map.Entry<String, String>> sortList = new LinkedList<Map.Entry<String,String>>(userMap.entrySet());
Collections.sort(sortList, new Comparator<Map.Entry<String, String>>() { @Override
public int compare(Entry<String, String> o1, Entry<String, String> o2) {
String suffix1 = o1.getKey().split("-\\d+")[1];
String suffix2 = o2.getKey().split("-\\d+")[1];
int len1 = suffix1.length();
int len2 = suffix2.length();
if(len1 != len2) {
return len1-len2;
}
int min = len1>=len2?len2:len1;
for(int i=0; i<min; i++) {
String c1 = suffix1.substring(i, i+1);
String c2 = suffix2.substring(i, i+1);
if(c1.toCharArray()[0] - c2.toCharArray()[0] == 0) {
continue;
} else {
return c1.toCharArray()[0] - c2.toCharArray()[0];
}
}
//continue
len1 = o1.getKey().length();
len2 = o2.getKey().length();
if(len1 != len2) {
return len1-len2;
}
min = len1>=len2?len2:len1;
for(int i=0; i<min; i++) {
String c1 = o1.getKey().substring(i, i+1);
String c2 = o2.getKey().substring(i, i+1);
if(c1.toCharArray()[0] - c2.toCharArray()[0] == 0) {
continue;
} else {
return c1.toCharArray()[0] - c2.toCharArray()[0];
}
}
return 0;
}
}); System.out.println("--------------------------------------");
Map<String, String> sortMap = new LinkedHashMap<String, String>();
for(Entry<String, String> entry: sortList) {
sortMap.put(entry.getKey(), entry.getValue());
}
for(Map.Entry<String, String> s : sortMap.entrySet()) {
System.out.println(s.getKey() + " " + s.getValue());
} } }

颜色区域是关键代码。

Java--HashMap排序的更多相关文章

  1. [翻译]Java HashMap工作原理

    大部分Java开发者都在使用Map,特别是HashMap.HashMap是一种简单但强大的方式去存储和获取数据.但有多少开发者知道HashMap内部如何工作呢?几天前,我阅读了java.util.Ha ...

  2. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  3. Java学习笔记(二二)——Java HashMap

    [前面的话] 早上起来好瞌睡哈,最近要注意一样作息状态.       HashMap好好学习一下. [定义] Hashmap:是一个散列表,它存储的内容是键值对(key——value)映射.允许nul ...

  4. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  5. java集合框架之java HashMap代码解析

     java集合框架之java HashMap代码解析 文章Java集合框架综述后,具体集合类的代码,首先以既熟悉又陌生的HashMap开始. 源自http://www.codeceo.com/arti ...

  6. HashMap的原理与实 无锁队列的实现Java HashMap的死循环 red black tree

    http://www.cnblogs.com/fornever/archive/2011/12/02/2270692.html https://zh.wikipedia.org/wiki/%E7%BA ...

  7. 【转】Java HashMap工作原理(好文章)

    大部分Java开发者都在使用Map,特别是HashMap.HashMap是一种简单但强大的方式去存储和获取数据.但有多少开发者知道HashMap内部如何工作呢?几天前,我阅读了java.util.Ha ...

  8. 【转】Java HashMap 源码解析(好文章)

    ­ .fluid-width-video-wrapper { width: 100%; position: relative; padding: 0; } .fluid-width-video-wra ...

  9. 转:Java HashMap实现详解

    Java HashMap实现详解 转:http://beyond99.blog.51cto.com/1469451/429789 1.    HashMap概述:    HashMap是基于哈希表的M ...

  10. java 集合排序(转)

    Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.ut ...

随机推荐

  1. getchar、scanf以及缓冲区的概念

      1.getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了.       getch()和getche( ...

  2. 指定盘符获取u盘PID、VID、序列号等信息

    最近学习scsi和DeviceIoControl,下载了微软WDK一些例子,以下代码精简自Windows-driver-samples-master\storage\tools\spti\src\sp ...

  3. 【php】PHP现代框架代表-Laravel框架核心技术特性

    一.php语言特点及发展现状 1.服务端脚本语言,自由度太大 ,一个业务逻辑可言写在模型里,控制器里,也可以单独封装成一个类,甚至可以嵌入到html里,这样势必会造成混乱,业务逻辑散落在各处,尤其对于 ...

  4. 修改序列(Sequence)的初始值(START WITH)

    1 执行:Alter Sequence SeqTest2010_S Increment By 1007; 2 执行:Select SeqTest2010_S.NextVal From Dual; 3 ...

  5. 038-PHP向返回的闭包函数实例中,传递外部变量参数

    <?php # 向返回的闭包函数实例中,传递外部变量参数 # 直接调用将不会输出$txt的内容 function demo(){ $txt = '我爱PHP'; # 1.function()内的 ...

  6. servlet中调用注入spring管理的dao(转)

    今天做大型仪器的的时候遇到的问题,转下为了以后能用 http://blog.csdn.net/jiyingying_up/article/details/44803585 我们用spring的依赖注入 ...

  7. 常见的Java的软件包

    java.lang: language java的核心包,Object System String Throwable jdk1.2版本后,该包中的类自动被导入. java.awt: 定义的都是用于j ...

  8. nidlist 问题

    错误问题如下: 解决方案: Dao文件 boolean DeleteList(String nidList); 改为: boolean DeleteList(@Param("nidList& ...

  9. hdu 1277 全文检索 (字典树应用)

    全文检索 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  10. vue学习(一)ES6常用语法

    1 ES6常用语法 1.1 变量提升 例① # 变量提升 <div id="app"> </div> <script> console.log( ...