Map<Key,Value>基于Value值排序
Map<Key,Value> 排序默认是按照KEY值的升序来进行。
针对按照Value来进行排序有两种方法:
第一种 使用TreeMap 代码如下
public class test{
public static void main(String[] args) {
HashMap<String, Double> map = new HashMap<String, Double>();
valueComparator vComparator = new valueComparator(map);
TreeMap<String, Double> sort_map = new TreeMap<String, Double>(vComparator);
map.put("C", 96.8);
map.put("D", 38.8);
map.put("A", 188.9);
map.put("B", 156.6);
System.out.println("treeMap" + sort_map);
}
}
public class valueComparator <T> implements Comparator<T> {
Map<T , Double> map;
public valueComparator(Map<T, Double> map) {
this.map = map;
}
@Override
public int compare(T o1, T o2) {
// TODO Auto-generated method stub
if(map.get(o1) - map.get(o2) >= 0)
{
return 1;
}
else {
return -1;
}
}
}
TreeMap实现排序
第二种 使用LinkedList 排序好后遍历插入到LinkedHashMap 下面代码使用了泛型 针对调用方的map的KEY ,VALUE值不作具体要求,通用性比上面第一种的实现要好很多,针对map包含数据量较大 ,比如百万级别,建议第二种 代码如下
package sortMap;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; public class MapUtil { public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(
Map<K, V> map) {
List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(
map.entrySet());// 将map的值传到LinkedList
Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
return (o1.getValue()).compareTo(o2.getValue());
}
});
Map<K, V> result = new LinkedHashMap<K, V>();
for (Entry<K, V> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return result; }
}
LinkedHashMap
Map<Key,Value>基于Value值排序的更多相关文章
- STL map 按key值和按value值排序
map是用来存放<key, value>键值对的数据结构,能够非常方便高速的依据key查到对应的value. 假如存储水果和其单位价格.我们用map来进行存储就是个不错的选择. 我们这样定 ...
- Java中Map<Key, Value>存储结构根据值排序(sort by values)
需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 ...
- C++ map排序(按照value值排序)_glp_hit_新浪博客
C++ map排序(按照value值排序)_glp_hit_新浪博客 C++ map排序(按照value值排序) (2012-07-12 14:19:51) 转载▼ 标签: ...
- java -- 对Map按键排序、按值排序
java -- 对Map按键.按值排序 1.按键排序(sort by key) 直接上代码 ↓ public Map<String, Str ...
- 160725、Java Map按键排序和按值排序
按键排序(sort by key) jdk内置的Java.util包下的TreeMap<K,V>既可满足此类需求,原理很简单,其重载的构造器之一 有一个参数,该参数接受一个比较器,比较器定 ...
- 搜狗面试的经典题(C++map按值排序,class struct的差别)
一:起因 (1)java Map排序(key,value).请看还有一篇博客 java Map排序 (2)c++ map排序(key,value),能够对c++ map和java Map进行对照:之 ...
- 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序
题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序 public static int maxGap(int nums[]) { if ( ...
- python3排序 sorted(key=lambda)--实现对字典按value值排序
使用python对列表(list)进行排序,说简单也简单,说复杂也复杂,我一开始学的时候也搞不懂在说什么,只能搜索一些英文文章看看讲解,现在积累了一些经验,写在这里跟大家分享, 1.sorted函数首 ...
- list中依据map<String,Object>的某个值排序
private void sort(List<Map<String, Object>> list) { Collections.sort(list, new Comparato ...
随机推荐
- python之路八
socket实现简单的FTP server端: import socket,osserver = socket.socket()server.bind(("localhost",9 ...
- mysql存储过程中 乱码问题解决办法
中文乱码无论在何时都是一个头疼的问题,mysql的存储过程参数也同样存在这个问题.1.直接使用insert into语句没问题,能够正常插入汉字.2.把insert into语句移到Procedure ...
- Koa2 的安装运行记录(一)
1.参考koa+react(一) http://blog.suzper.com/2016/10/19/koa-react-%E4%B8%80/ 为了使用 KOA2 能够运行,必须能够使用ES7语法 a ...
- java26
1:网络编程(理解) (1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享 (2)网络编程模型 (3)网络编程的三要素 A:IP地址 ...
- 【转】Caffe初试(六)激活层及参数
在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入一个blob数据.在运算过程中,没有改变数据的大小,即输入 ...
- Jmeter连接Mysql
1.下载连接mysql数据库jar包,地址:http://files.cnblogs.com/files/xiaoxitest/mysql-connector-java-5.1.28.zip(因不支持 ...
- bootstrap 20161012
栅格系统 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="u ...
- 【leetcode】Remove Element
题目概述: Given an array and a value, remove all instances of that value in place and return the new len ...
- WCF服务承载(笔记)
自托管(也做自承载) 承载 WCF 服务最灵活.最便捷的方法就是进行自承载.要能够自承载服务,必须满足两个条件.第一,需要 WCF 运行时:第二,需要可以承载 ServiceHost 的托管 .NET ...
- 【使用Unity开发Windows Phone上的2D游戏】(2)初识工具
下载工具 我们需要下载两个工具:Unity 和 2D Toolkit Unity 在我写这篇文章的时候,最新的Unity版本是4.2.1, 下载地址 Unity公司的开发效率实在是很高,我一个多月前开 ...