Map排序(按key/按value)
package com.abc.test; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Map.Entry; /**
* 可能会遇到这样的情况,我可能要对Map<key,value>的集合进行排序,而这种排序又分为两种情况,你可能按key值排序;
* 另外你也可能会遇到按value值进行排序的情况。
* 大家都知道,默认的情况下,TreeMap:是按key升序,进行排序的;LinkedHashMap:是按加入顺序进行排序的
* ;HashMap:内部数值的顺序并不是以存放的先后顺序为主
* ,而是以hash值的顺序为主,其次才是存放的先后顺序。在这里我们只讨论如何实现HashMap的排序。
*
*/
@SuppressWarnings("unchecked")
public class MapSortTest { public static void main(String[] args) {
//初始化map
Map<String, Integer> map=getMapInstance();
printMap(map); //选择操作
Scanner input=new Scanner(System.in);
int num=input.nextInt();
switch (num) {
case 0:
System.exit(0);
break;
case 1:
Map<String, Integer> sortMaps = sortMapByKey(map);
printMap(sortMaps);
break;
case 2:
sortMapByValue(map);
break;
case 3:
mapSortByKey(map);
break;
case 4:
mapSortByValue(map);
break;
default:
System.out.println("error input!");
break;
} } public static Map sortMapByKey(Map map) {
Map<Object, Object> mapVK = new TreeMap<Object, Object>(
new Comparator<Object>() {
public int compare(Object obj1, Object obj2) {
String v1 = (String) obj1;
String v2 = (String) obj2;
int s = v2.compareTo(v1);
return s;
}
});
Set col = map.keySet();
Iterator iter = col.iterator();
while (iter.hasNext()) {
String key = (String) iter.next();
Integer value = (Integer) map.get(key);
mapVK.put(key, value);
}
return mapVK;
} public static void sortMapByValue(Map maps) {
List<Map.Entry<String, Integer>> info = new ArrayList<Map.Entry<String, Integer>>(maps.entrySet());
Collections.sort(info, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> obj1,Map.Entry<String, Integer> obj2) {
return obj2.getValue() - obj1.getValue();
}
});
for (int j = 0; j < info.size(); j++) {
System.out.println(info.get(j).getKey() + "------->"+ info.get(j).getValue());
}
} // ====================================================================================
private static SortedMap<String, Integer> mapSortByKey(Map<String, Integer> unsort_map) {
TreeMap<String, Integer> result = new TreeMap<String, Integer>();
Object[] unsort_key = unsort_map.keySet().toArray();
Arrays.sort(unsort_key);
for (int i = 0; i < unsort_key.length; i++) {
result.put(unsort_key[i].toString(), unsort_map.get(unsort_key[i]));
}
return result.tailMap(result.firstKey());
} public static void mapSortByValue(Map map) {
List arrayList = new ArrayList(map.entrySet());
Collections.sort(arrayList,new Comparator(){
@Override
public int compare(Object o1, Object o2) {
Map.Entry obj1 = (Map.Entry)o1;
Map.Entry obj2 = (Map.Entry)o2;
return obj1.getValue().toString().compareTo(obj2.getValue().toString());
}
});
for(Iterator it = arrayList.iterator();it.hasNext();){
Map.Entry entry = (Map.Entry)it.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
public static void abc(Map map){
TreeMap treemap = new TreeMap(map);
}
public static void abcd() {
Map<String, Integer> keyfreqs = new HashMap<String, Integer>();
ArrayList<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(keyfreqs.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,Map.Entry<String, Integer> o2) {
return (o2.getValue() - o1.getValue());
}
});
for (Entry<String, Integer> e : list) {
System.out.println(e.getKey() + "::::" + e.getValue());
}
}
public static Map getMapInstance(){
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("apple",40);
map.put("boy",30);
map.put("cat",20);
map.put("dog",10);
return map;
}
public static void printMap(Map map){
Iterator i = map.entrySet().iterator();
while (i.hasNext()) {
Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) i.next();
System.out.println(entry.getKey() + ":"+ entry.getValue());
}
System.out.println("========================================================");
}
}
Map排序(按key/按value)的更多相关文章
- Map排序——按key排序,按value排序
注:转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5959279.html 上一篇博文谈到了集合类的自定义排序方式,那么进一步扩展开来,与集合同等重要的Map有 ...
- C++ STL中Map的按Key排序和按Value排序
map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进 ...
- java Map 之 排序(key,value)
一:起因: (1)现实中须要Map容器进行排序的情况非常多非常多:由于Map<key,value>键值对的存储结构特别是HashMap的结构是非常优秀的,数据存储就难免对其进行排序: (2 ...
- Map排序(按key排序,按value排序)
主要分两种,按键排序.按值排序. 而且,按key排序主要用于TreeMap,而按value排序则对于Map的子类们都适用. 一.按键排序 按Key排序主要用于TreeMap,可以实现按照Key值的大小 ...
- C++ STL中Map的按Key排序跟按Value排序
C++ STL中Map的按Key排序和按Value排序 map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定 ...
- Java Map排序
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value). 1.按键排序 jdk内置的java.util包下的Tr ...
- C++ map排序(按照value值排序)_glp_hit_新浪博客
C++ map排序(按照value值排序)_glp_hit_新浪博客 C++ map排序(按照value值排序) (2012-07-12 14:19:51) 转载▼ 标签: ...
- STL容器——对map排序
STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序 ,和输入 ...
- golang中的slice翻转存在以及map中的key判断
//slice翻转 func stringReverse(src []string){ if src == nil { panic(fmt.Errorf("the src can't be ...
随机推荐
- 百度UEditor组件出现Parameters: Invalid chunk '' ignored警告的分析
使用百度UEditor在线编辑器组件时,出现Parameters: Invalid chunk '' ignored的警告,之前的项目使用却没有.两个项目的环境应该是一样的. 没有时间去对照两项目使用 ...
- 4K加速普及,8K近在咫尺,下一个是?
从铺天盖地的厂商宣传到亲戚朋友家的客厅.不可否认4K时代已全面到来------业内人士估计2015年是4K电视的一个突破年.知名市场调查机构StrategyAnalytics对4K电视进行了调 ...
- libgo协程库:网络性能完爆ASIO异步模型(-O3测试)
在purecpp社区的github组织中有一个协程库:https://github.com/yyzybb537/libgo 近日有用户找到我,想要了解一下libgo库在网络方面的性能,于是选取已入选标 ...
- LINUX 数据结构 &算法 网络协议 & 网络编程 多任务编程
http://blog.csdn.net/goodluckwhh/article/category/1303091
- Ogre Addon之Paged Geometry
还是OGRE好啊,无尽的Addon,无尽的宝藏.既有SkyX,Hydrx这样的天空水体渲染库可供学习,还有Paged Geometry这样的“大规模海量geometry管理系统”.它通过batch,s ...
- 进程控制之wait和waitpid函数
当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号.因为子进程终止是个异步事件(这可以在父进程运行的任何时候发生),所以这种信号也是内核向父进程发的异步通知.父进程可以选择忽略该信号, ...
- Java再学习——synchronized与volatile
volatile:只保证共享资源的可见性的,任何修改都写在主存,所有线程马上就能看到,适用于新值不依赖于旧值的情形. synchronized:保证可操作的原子性一致性和可见性. volatile和s ...
- 【阿里云产品公测】ACE安装Discuz超详细图文教程
作者:阿里云用户51干警网 hello.今天我们来在阿里云ACE上安装discuz. 因为本人不喜欢X3.2的版本,这次我使用的是DZX2.5. 首先的是准备工作: 一.申请阿里云ACE内测 http ...
- linux之磁盘配额(quota)
1.什么是quota 简单的说就是限制用户对磁盘空间的使用量. 因为Linux是多用户多任务的操作系统,许多人共用磁盘空间,为了合理的分配磁盘空间,于是就有了quota的出现. 2.quota的用途 ...
- TCP/IP TIME_WAIT状态
百度运维部二面面试官问我这个 我直接懵逼了 TIME_WAIT状态是通信双方简历TCP连接后, 主动关闭的一方就会进入TIME_WAIT状态 1.client向server发送FIN(M),clien ...