当前位置: 首页 > news >正文

java treemap 降序排序_Java TreeMap 升序|降序排列

import java.util.Comparator;

import java.util.TreeMap;

public class Main {

public static void main(String[] args) {

TreeMap map1 = new TreeMap(); //默认的TreeMap升序排列

TreeMap map2= new TreeMap(new Comparator(){

/*

* int compare(Object o1, Object o2) 返回一个基本类型的整型,

* 返回负数表示:o1 小于o2,

* 返回0 表示:o1和o2相等,

* 返回正数表示:o1大于o2。

*/

public int compare(Integer a,Integer b){

return b-a;

}

});

map2.put(1,2);

map2.put(2,4);

map2.put(7, 1);

map2.put(5,2);

System.out.println("Map2="+map2);

map1.put(1,2);

map1.put(2,4);

map1.put(7, 1);

map1.put(5,2);

System.out.println("map1="+map1);

}

}

分析:可以通过自定义compare函数,来实现各种类型的排序。

以下内容取至Api:

TreeMap

public TreeMap()

使用键的自然顺序构造一个新的、空的树映射。插入该映射的所有键都必须实现

Comparable 接口。另外,所有这些键都必须是

可互相比较的:对于映射中的任意两个键

k1 和

k2,执行

k1.compareTo(k2) 都不得抛出

ClassCastException。如果用户试图将违反此约束的键添加到映射中(例如,用户试图将字符串键添加到键为整数的映射中),则

put(Object key, Object value) 调用将抛出

ClassCastException。

TreeMap

public TreeMap(Comparator super K> comparator)

构造一个新的、空的树映射,该映射根据给定比较器进行排序。插入该映射的所有键都必须由给定比较器进行

相互比较:对于映射中的任意两个键

k1 和

k2,执行

comparator.compare(k1, k2) 都不得抛出

ClassCastException。如果用户试图将违反此约束的键放入映射中,则

put(Object key, Object value) 调用将抛出

ClassCastException。

参数:

comparator - 将用来对此映射进行排序的比较器。如果该参数为

null,则将使用键的

自然顺序。

java.util

接口 Comparator

类型参数:

T - 此 Comparator 可以比较的对象类型

compare

int compare(T o1,

T o2)

比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。

在前面的描述中,符号 sgn(expression) 表示 signum 数学函数,根据 expression 的值为负数、0 还是正数,该函数分别返回 -1、0 或 1。

实现程序必须确保对于所有的 x 和 y 而言,都存在 sgn(compare(x, y)) == -sgn(compare(y, x))。(这意味着当且仅当 compare(y, x) 抛出异常时 compare(x, y) 才必须抛出异常。)

实现程序还必须确保关系是可传递的:((compare(x, y)>0) && (compare(y, z)>0)) 意味着 compare(x, z)>0。

最后,实现程序必须确保 compare(x, y)==0 意味着对于所有的 z 而言,都存在 sgn(compare(x, z))==sgn(compare(y, z))。

虽然这种情况很普遍,但并不 严格要求 (compare(x, y)==0) == (x.equals(y))。一般说来,任何违背这个条件的 Comparator 都应该清楚地指出这一事实。推荐的语言是“注意:此 Comparator 强行进行与 equals 不一致的排序。”

参数:

o1 - 要比较的第一个对象。

o2 - 要比较的第二个对象。

返回:

根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。

抛出:

相关文章:

  • java 流关闭顺序_JAVA的节点流和处理流以及流的关闭顺序
  • java 多层结构故障_多层构架在实践中一些问题
  • java项目提高安全性_Java线程安全与程序性能
  • mysql 获取真是执行计划_Oracle 从缓存里面查找真实的执行计划
  • mysql 越文_mysql数据库乱码之保存越南文乱码解决方法_MySQL
  • java发布_java项目发布的方式
  • python分享的代码怎么写_【图片】分享一段功能非常简陋的python代码实现下载free种【pt吧】_百度贴吧...
  • android js调用java_如何在Android平台上使用JS直接调用Java方法
  • python实现并发和并行的方式有哪些_Python中的并行和并发是什么
  • java a a=null_面试题((A)null).fun()——java中null值的强转
  • java获取hashcode_java identityHashCode 和 hashCode
  • django mysql 加锁_Django数据库事务和死锁
  • 二叉树某结点的路径java_java二叉树和为某一个值的路径如何实现?思路分享
  • java清空JTextArea文本内容_java – 如何在JTextArea中更改文本的位置
  • java设计模式观察者模式吗_JAVA设计模式---观察者模式
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • Android Studio:GIT提交项目到远程仓库
  • Angular6错误 Service: No provider for Renderer2
  • axios 和 cookie 的那些事
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • HTTP--网络协议分层,http历史(二)
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Invalidate和postInvalidate的区别
  • JAVA SE 6 GC调优笔记
  • JAVA并发编程--1.基础概念
  • Lucene解析 - 基本概念
  • Rancher如何对接Ceph-RBD块存储
  • Spring框架之我见(三)——IOC、AOP
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • UI设计初学者应该如何入门?
  • #Ubuntu(修改root信息)
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (12)Hive调优——count distinct去重优化
  • (动态规划)5. 最长回文子串 java解决
  • (多级缓存)缓存同步
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)计算机毕业设计ssm电影分享网站
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十三)Flask之特殊装饰器详解
  • (四)c52学习之旅-流水LED灯
  • (一一四)第九章编程练习
  • (译)计算距离、方位和更多经纬度之间的点
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)linux 命令大全
  • (转)winform之ListView
  • . NET自动找可写目录
  • .Net CF下精确的计时器
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net经典笔试题
  • .net网站发布-允许更新此预编译站点
  • @FeignClient注解,fallback和fallbackFactory
  • []利用定点式具实现:文件读取,完成不同进制之间的