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. 关于无法下载sklearn中的MNIST original数据集的问题

    在使用Sklearn进行加载自带的数据集MNIST时,总是报错,代码及相应的错误显示如下: from sklearn.datasets import fetch_mldata mnist = fetc ...

  2. esxi 主机用户功能说明

    1.  root 用户 默认情况下,每个 ESXi 主机都有一个具有管理员角色的 root 用户帐户.该 root 用户帐户可用于本地管理,并可用于将主机连接到 vCenter Server. 此公共 ...

  3. netty权威指南学习笔记四——TCP粘包/拆包之粘包问题解决

    发生了粘包,我们需要将其清晰的进行拆包处理,这里采用LineBasedFrameDecoder来解决 LineBasedFrameDecoder的工作原理是它依次遍历ByteBuf中的可读字节,判断看 ...

  4. mcu运行时间估算

    昨个伙计问我他那个板子的程序运行时间估算问题… 现在说一下估算的思路.首先确定有几个点,板子的主频.时钟周期,机器周期. 首先由主频f得到一个时钟周期为1/f. 再者时钟周期与机器周期有一个比例关系, ...

  5. 156-PHP strrpos和strripos函数

    <?php //定义两个字符串 $str='pasSword'; $position=strrpos($str,'s'); //不区分大小写判断 echo "字母S在{$str}中最后 ...

  6. ServletContext 详解

    ServletContext——它是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放.request,一个用户可有多个:session,一个用户一个:而servletContext ...

  7. SciKit-Learn 数据集基本信息

    ## 保留版权所有,转帖注明出处 章节 SciKit-Learn 加载数据集 SciKit-Learn 数据集基本信息 SciKit-Learn 使用matplotlib可视化数据 SciKit-Le ...

  8. 学习EIGRP 笔记

    CEFFIB(转发信息库,RIB现在运行了CEF,就称之为FIB)show ip cef detail EIGRP的基本组件:1.邻居发现机制2.可靠传输协议(RTP机制)3.DUAL算法4.多种网络 ...

  9. Spring入门之二-------SpringIoC之实例化Bean以及注入Bean

    一.实例化Bean 1. 通过默认构造方法实创建Bean public class Bean1 { public Bean1() { System.out.println(this.getClass( ...

  10. (转)null和NULL和nullptr和””区别

    突然想到这个有趣的问题:C语言和C++对大小写是敏感的,也就是说null和NULL是区别对待的.NULL代表空地址,null只是一个符号.便来深究,看了很多资料,总结如下: 其实null和NULL都是 ...