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. (九)微信小程序---for指令

    对于数据是列表 wxml <view wx:for="{{dataList}}">{{index}}-{{item}}</view> 我们可以看到上面的代码 ...

  2. CF97B Superset超级集合

    CF97B Superset 这题主要是构造难想.看看数据范围发现连\(O(n^2)\)都被卡了,然后 考试的名称提醒我 想到了分治. 坐标按横坐标为关键字排序后找中间的点进行分治不是点分治qwq. ...

  3. 指令——ps -ef

    一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个. 指令:ps [process  show] 作 ...

  4. Azure Container Registry-基于开源 Docker Registry 的专用 Docker 注册表服务

    本文语雀知识库:https://www.yuque.com/seanyu/azure/acr 概述 Azure 容器注册表(Azrue Container Registry,简称ACR)是 Azure ...

  5. vim 好用的插件

    1  切换文件   使用buffer   这里可以安装一个  minibufExplorer https://github.com/huanglongchao/minibufexpl.vim 2 在项 ...

  6. Swift泛型定义 同时限定T的类(class)和多协议(protocol)

    https://blog.csdn.net/weixin_34054931/article/details/88027728 swift 可以定义模板函数,如: func testFunc<T& ...

  7. Codeforces 176B 经典DP

    非常好的一个题目,CF上的DP都比较经典 题意就是 给定一个串A,B,正好执行K次操作,每次操作可以把 A串从中间切开,并调换两部分的位置,问最后得到B串共有多少种不同的切法(只要中间有一次不同,即视 ...

  8. 想要写好Synthesis Essay,学会审题很重要

    很多留学生都不太愿意写synthesis essay,因为它的难度要比其他类型的essay要大得多.写一篇synthesis essay需要有能力消化相关的信息,通过语言组织之后再呈现.虽然这种写作技 ...

  9. Idea 打印GC

    设置 Run ⇒ Edit Configurations ⇒ VM options 添加 -XX:+PrintGCDetails 运行程序后会在末尾打印GC信息 2019-11-02 13:07:47 ...

  10. 操作系统类型&操作系统结构&现代操作系统基本特征

    五大类型操作系统 (1). 批处理操作系统 用户脱机使用计算机 用户提交作业之后直到获得结果之前就不再和计算机打交道. 作业提交的方式可以是直接交给计算中心的管理操作员,也可以是通过远程通讯线路提交. ...