背景

SortedMap的实现类TreeMap可以按自然顺序或自定义顺序遍历键(key),有时我们需要根据值(Value)进行排序,本文提供了一种简单实现思路。

实现

  • Comparator接口
    使用Value排序时,仍然使用TreeMap实现类,只不过需要在TreeMap的构造函数中引入Comparator实现。

  • TreeMap构造器
    ValueComparator是Comparator接口的实现,该实现包含了一个普通的Map对象作为成员变量,并在compare方法中做了一点手脚。即在compare方法中,将key的比较转换为value的比较。

  • 局限性

  这种方式只能对Map进行排序,而不能添加单个key-value映射。

  • 具体实现代码

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap; /**
* Created by liutingna on 2017/9/30.
*/
public class TestComparator {
class ValueComparator implements Comparator<String> { Map<String, Long> base; //Comparator外部比较器
public ValueComparator(Map<String, Long> base) {
this.base = base;
} //根据Map的值进行比较
public int compare(String a, String b) {
return base.get(a).compareTo(base.get(b));
}
} public static void main(String[] args) {
Map<String, Long> map = new HashMap<>();
TestComparator testComparator = new TestComparator();
TestComparator.ValueComparator valueComparator = testComparator.new ValueComparator(map);
Map<String, Long> keySortMap = new TreeMap<>();
Map<String, Long> valueSortMap = new TreeMap<>(valueComparator); map.put("aaa", 15L);
map.put("bxw", 13L);
map.put("abc", 14L);
map.put("bbb", 18L);
System.out.println(map);//{aaa=15, bxw=13, abc=14, bbb=18} //根据key进行比较
keySortMap.putAll(map);
System.out.println(keySortMap);//{aaa=15, abc=14, bbb=18, bxw=13}
//根据value进行比较
valueSortMap.putAll(map);
// valueSortMap.put("ccc",17L);//NullPointerException,这种方式只能对Map进行排序,而不能添加单个key-value映射
System.out.println(valueSortMap);//{bbb=18, aaa=15, abc=14, bxw=13}
}
}

  

相关资料

Comparable和Comparator的区别

最新文章

  1. 练习JavaScript判断上传文件后缀名
  2. 解决linux 无法下载 oracle 官网 java的 安装包
  3. c/c++细节知识整理
  4. OAuth
  5. 全面认识.NET框架(一)
  6. 关于64位Win7/Win 8 下怎么学习汇编语言
  7. My First Blog.
  8. jQuery中的supersized的插件的功能描述
  9. Flex LinkButton鼠标划过出现下划线
  10. python13_day4
  11. [最直白版]一步一步教你用VMware Workstation12安装Ubuntu 16.04和VMware Tools的教程
  12. svn部署项目
  13. js基础进阶--编的实用技巧(一)
  14. 分离式lnmp部署
  15. [JS]如何理解JS中的类和对象
  16. 【bzoj1937】 Shoi2004—Mst 最小生成树
  17. Neo4j简单的样例
  18. JS文档DOM
  19. bzoj2337 XOR和路径
  20. Linux安装AUTOCONF和AUTOMAKE产生的程序的一般步骤

热门文章

  1. loj #161 子集卷积
  2. 2017-2018-1 20179215 第十一周 ShellShock攻击实验
  3. LeetCode Construct the Rectangle
  4. mapreduce-实现多表关联
  5. BZOJ2648:SJY摆棋子
  6. java中初始化方法
  7. asp.net自动将页面中的所有空间置为不可用以及将所有文本框置空
  8. hihoCoder#1181(欧拉路径)
  9. [转载]Linux 内核list_head 学习(一)
  10. C# winfrom FastReport Print