JAVA排序(二) Comparator接口
接着说关于Comparator接口,
java.util Interface Comparator<T>(该泛型指定的是被比较的类),使用该接口不需要在待比较类进行比较操作,即在不修改源码的情况下进行比较(如代码交付后),
与Comparable相比稍微复杂,但是还是很方便~~
首先是待比较类,这里是一个记录温度与湿度的为了与上面做区分,在这里叫EnvironmentForms类:
- public class EnvironmentForms {
- /**温度*/
- private float temp;
- /**湿度*/
- private float hum;
- public float getTemp() {
- return temp;
- }
- public void setTemp(float temp) {
- this.temp = temp;
- }
- public float getHum() {
- return hum;
- }
- public void setHum(float hum) {
- this.hum = hum;
- }
- /**
- * 无参构造
- */
- public EnvironmentForms(){}
- /**
- * 有参构造
- * @param temp 温度
- * @param hum 湿度
- */
- public EnvironmentForms(float temp, float hum) {
- super();
- this.temp = temp;
- this.hum = hum;
- }
- @Override
- public String toString() {
- return "EnvironmentForm [温度=" + temp + ", 湿度=" + hum + "]\n";
- }
- }
在不修改此类的情况下,还是对温度进行降序排列,当温度相等湿度降序排列,
首先写一个比较规则类实现Comparator接口,
实现compare int compare(T o1,T o2)与equals boolean equals(Object obj)(该方法这里没有复写),代码如下:
- import java.util.Comparator;
- public class EnvironmentComparator implements Comparator<EnvironmentForms> {
- @Override
- public int compare(EnvironmentForms env1, EnvironmentForms env2) {
- //大于所给温度则返回-1
- if(env1.getTemp()>env2.getTemp()){
- return -1;
- }else if(env1.getTemp()<env2.getTemp()){
- //小于所给温度返回1
- return 1;
- }else{
- //大于所给湿度返回-1
- if(env1.getHum()>env2.getHum()){
- return -1;
- //小于所给湿度返回1
- }else if(env1.getTemp()<env2.getHum()){
- return 1;
- }
- }
- return 0;
- }
- }
最后进行测试~~代码如下:
- import java.util.Arrays;
- public class ComparatorTestMain {
- public static void main(String[] args) {
- EnvironmentForms env[] = {new EnvironmentForms(28.5f,50.1f),
- new EnvironmentForms(28.5f,60.1f),
- new EnvironmentForms(28.5f,40.1f),
- new EnvironmentForms(17.5f,50.1f),
- new EnvironmentForms(37.5f,50.1f)};
- System.out.println("********排序前********");
- System.out.println(Arrays.toString(env));
- System.out.println("********排序后********");
- Arrays.sort(env, new EnvironmentComparator());
- System.out.println(Arrays.toString(env));
- }
- }
运行结果~~
- ********排序前********
- [EnvironmentForm [温度=28.5, 湿度=50.1]
- , EnvironmentForm [温度=28.5, 湿度=60.1]
- , EnvironmentForm [温度=28.5, 湿度=40.1]
- , EnvironmentForm [温度=17.5, 湿度=50.1]
- , EnvironmentForm [温度=37.5, 湿度=50.1]
- ]
- ********排序后********
- [EnvironmentForm [温度=37.5, 湿度=50.1]
- , EnvironmentForm [温度=28.5, 湿度=60.1]
- , EnvironmentForm [温度=28.5, 湿度=50.1]
- , EnvironmentForm [温度=28.5, 湿度=40.1]
- , EnvironmentForm [温度=17.5, 湿度=50.1]
- ]
JAVA排序(二) Comparator接口的更多相关文章
- Java基础 TreeSet()来实现数组的【定制排序】 : Comparable接口(自然排序) 或者 Comparator接口 (定制排序)
笔记: //排序真麻烦!没有C++里的好用又方便!ORZ!ORZ!数组排序还还自己写个TreeSet()和( Comparable接口(自然排序) 或者 Comparator接口 (定制排序))imp ...
- Java之——利用Comparator接口对多个排序条件进行处理
转载自:http://blog.csdn.net/l1028386804/article/details/56513205 膜拜大神··· 一.需求 假设现在有个如此的需求:需要对一个这样的雇员列表进 ...
- java Comparable 和 Comparator接口区别
Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着“该类支持排序”. 即然实现Comparable接口的类支持排序,假设现在存在“实现C ...
- Java Comparable 和 Comparator 接口详解
本文基于 JDK8 分析 Comparable Comparable 接口位于 java.lang 包下,Comparable 接口下有一个 compareTo 方法,称为自然比较方法.一个类只要实现 ...
- JAVA排序(一) Comparable接口
昨天接到一个实习公司的电话面试,来的很突然,没有准备. 由于以前没用过,在被他问及是否用过JAVA的排序工具Comparable与Comparator时,没有回答上来,只能实话实说没有用过. 感觉太丢 ...
- Comparatable接口和Comparator接口的使用与区别
这篇博文可以为你解决的问题如下: 什么是自然排序 Collections.sort()与Arrays.sort()的异同点 Comparatable接口和Comparator接口各自的排序依据(理论讲 ...
- java基础-抽象类与接口(转)
抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 ...
- 我的Java开发学习之旅------>Java利用Comparator接口对多个排序条件进行处理
一需求 二实现Comparator接口 三验证排序结果 验证第一条件首先按级别排序级别最高的排在前面 验证第二条如果级别相等那么按工资排序工资高的排在前面 验证第三条如果工资相当则按入职年数排序入职时 ...
- Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序
package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...
随机推荐
- 说一说Servlet 的生命周期
答:servlet 有良好的生存期的定义, 包括加载和实例化. 初始化. 处理请求以及服务结束.这个生存期由 javax.servlet.Servlet 接口的 init,service 和 dest ...
- USB数据流模型
USB数据流模型 <<USB Specification11>> << USB Specification20>> << Linux Dev ...
- Eclipse 实现关键字自动补全功能 (转)
一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项是默认关闭的, ...
- Linux 网络编程: echo Service
前言 大病初愈,感谢某人的陪伴,感谢王乐庆同学和赵攀同学的细心照顾.原以为过了第八周就不忙了,却没想到还有明天的党章考试.还是写代码比背党章有意思~趁着服务器还没过期,赶紧把 echo 完成了.关于错 ...
- Python之路:Python 基础(一)
一.第一句Python代码 在 /home/dev/ 目录下创建 hello.py 文件,内容如下: print "hello,lenliu" 执行 hello.py 文件,即: ...
- java牛人给新人的几点建议
展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的1 ...
- python mysql多条插入
程序的目的是把文本里面的数据存储到数据库中,原来的思路是读一条,插入一条,结果就是时间长的不得了...18万条的数据,真是慢. 后来的想法是把所有的记录都读到一个list里,结果是mysql奔溃go ...
- jqmobile
标准页面结构 <!DOCTYPE html> <html> <head> <title>Page Title</title> <lin ...
- javascript Error对象详解
今天谈一下在IE浏览器下返回执行错误的Javascript代码所在的问题.其中在IE浏览器下,如果你使用了try-catch,那么当出现异常的时候,IE浏览器会传递一个Error对象. ~~~怎么通过 ...
- XML中SystemID和PublicID的区别
http://hi.baidu.com/binboot007/item/1533f91d52113d7c7b5f259c http://supportweb.cs.bham.ac.uk/documen ...