接着说关于Comparator接口,

java.util Interface Comparator<T>(该泛型指定的是被比较的类),使用该接口不需要在待比较类进行比较操作,即在不修改源码的情况下进行比较(如代码交付后),

与Comparable相比稍微复杂,但是还是很方便~~

首先是待比较类,这里是一个记录温度与湿度的为了与上面做区分,在这里叫EnvironmentForms类:

  1. public class EnvironmentForms {
  2. /**温度*/
  3. private float temp;
  4. /**湿度*/
  5. private float hum;
  6. public float getTemp() {
  7. return temp;
  8. }
  9. public void setTemp(float temp) {
  10. this.temp = temp;
  11. }
  12. public float getHum() {
  13. return hum;
  14. }
  15. public void setHum(float hum) {
  16. this.hum = hum;
  17. }
  18. /**
  19. * 无参构造
  20. */
  21. public EnvironmentForms(){}
  22. /**
  23. * 有参构造
  24. * @param temp 温度
  25. * @param hum 湿度
  26. */
  27. public EnvironmentForms(float temp, float hum) {
  28. super();
  29. this.temp = temp;
  30. this.hum = hum;
  31. }
  32. @Override
  33. public String toString() {
  34. return "EnvironmentForm [温度=" + temp + ", 湿度=" + hum + "]\n";
  35. }
  36. }

在不修改此类的情况下,还是对温度进行降序排列,当温度相等湿度降序排列,

首先写一个比较规则类实现Comparator接口,

实现compare int compare(T o1,T o2)与equals boolean equals(Object obj)(该方法这里没有复写),代码如下:

  1. import java.util.Comparator;
  2. public class EnvironmentComparator implements Comparator<EnvironmentForms> {
  3. @Override
  4. public int compare(EnvironmentForms env1, EnvironmentForms env2) {
  5. //大于所给温度则返回-1
  6. if(env1.getTemp()>env2.getTemp()){
  7. return -1;
  8. }else if(env1.getTemp()<env2.getTemp()){
  9. //小于所给温度返回1
  10. return 1;
  11. }else{
  12. //大于所给湿度返回-1
  13. if(env1.getHum()>env2.getHum()){
  14. return -1;
  15. //小于所给湿度返回1
  16. }else if(env1.getTemp()<env2.getHum()){
  17. return 1;
  18. }
  19. }
  20. return 0;
  21. }
  22. }

最后进行测试~~代码如下:

  1. import java.util.Arrays;
  2. public class ComparatorTestMain {
  3. public static void main(String[] args) {
  4. EnvironmentForms env[] = {new EnvironmentForms(28.5f,50.1f),
  5. new EnvironmentForms(28.5f,60.1f),
  6. new EnvironmentForms(28.5f,40.1f),
  7. new EnvironmentForms(17.5f,50.1f),
  8. new EnvironmentForms(37.5f,50.1f)};
  9. System.out.println("********排序前********");
  10. System.out.println(Arrays.toString(env));
  11. System.out.println("********排序后********");
  12. Arrays.sort(env, new EnvironmentComparator());
  13. System.out.println(Arrays.toString(env));
  14. }
  15. }

运行结果~~

  1. ********排序前********
  2. [EnvironmentForm [温度=28.5, 湿度=50.1]
  3. , EnvironmentForm [温度=28.5, 湿度=60.1]
  4. , EnvironmentForm [温度=28.5, 湿度=40.1]
  5. , EnvironmentForm [温度=17.5, 湿度=50.1]
  6. , EnvironmentForm [温度=37.5, 湿度=50.1]
  7. ]
  8. ********排序后********
  9. [EnvironmentForm [温度=37.5, 湿度=50.1]
  10. , EnvironmentForm [温度=28.5, 湿度=60.1]
  11. , EnvironmentForm [温度=28.5, 湿度=50.1]
  12. , EnvironmentForm [温度=28.5, 湿度=40.1]
  13. , EnvironmentForm [温度=17.5, 湿度=50.1]
  14. ]

JAVA排序(二) Comparator接口的更多相关文章

  1. Java基础 TreeSet()来实现数组的【定制排序】 : Comparable接口(自然排序) 或者 Comparator接口 (定制排序)

    笔记: //排序真麻烦!没有C++里的好用又方便!ORZ!ORZ!数组排序还还自己写个TreeSet()和( Comparable接口(自然排序) 或者 Comparator接口 (定制排序))imp ...

  2. Java之——利用Comparator接口对多个排序条件进行处理

    转载自:http://blog.csdn.net/l1028386804/article/details/56513205 膜拜大神··· 一.需求 假设现在有个如此的需求:需要对一个这样的雇员列表进 ...

  3. java Comparable 和 Comparator接口区别

    Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着“该类支持排序”.  即然实现Comparable接口的类支持排序,假设现在存在“实现C ...

  4. Java Comparable 和 Comparator 接口详解

    本文基于 JDK8 分析 Comparable Comparable 接口位于 java.lang 包下,Comparable 接口下有一个 compareTo 方法,称为自然比较方法.一个类只要实现 ...

  5. JAVA排序(一) Comparable接口

    昨天接到一个实习公司的电话面试,来的很突然,没有准备. 由于以前没用过,在被他问及是否用过JAVA的排序工具Comparable与Comparator时,没有回答上来,只能实话实说没有用过. 感觉太丢 ...

  6. Comparatable接口和Comparator接口的使用与区别

    这篇博文可以为你解决的问题如下: 什么是自然排序 Collections.sort()与Arrays.sort()的异同点 Comparatable接口和Comparator接口各自的排序依据(理论讲 ...

  7. java基础-抽象类与接口(转)

    抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类    ...

  8. 我的Java开发学习之旅------>Java利用Comparator接口对多个排序条件进行处理

    一需求 二实现Comparator接口 三验证排序结果 验证第一条件首先按级别排序级别最高的排在前面 验证第二条如果级别相等那么按工资排序工资高的排在前面 验证第三条如果工资相当则按入职年数排序入职时 ...

  9. Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序

    package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...

随机推荐

  1. 说一说Servlet 的生命周期

    答:servlet 有良好的生存期的定义, 包括加载和实例化. 初始化. 处理请求以及服务结束.这个生存期由 javax.servlet.Servlet 接口的 init,service 和 dest ...

  2. USB数据流模型

    USB数据流模型 <<USB Specification11>> << USB Specification20>> << Linux Dev ...

  3. Eclipse 实现关键字自动补全功能 (转)

    一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项是默认关闭的, ...

  4. Linux 网络编程: echo Service

    前言 大病初愈,感谢某人的陪伴,感谢王乐庆同学和赵攀同学的细心照顾.原以为过了第八周就不忙了,却没想到还有明天的党章考试.还是写代码比背党章有意思~趁着服务器还没过期,赶紧把 echo 完成了.关于错 ...

  5. Python之路:Python 基础(一)

    一.第一句Python代码 在 /home/dev/ 目录下创建 hello.py 文件,内容如下: print "hello,lenliu" 执行 hello.py 文件,即: ...

  6. java牛人给新人的几点建议

    展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的1 ...

  7. python mysql多条插入

    程序的目的是把文本里面的数据存储到数据库中,原来的思路是读一条,插入一条,结果就是时间长的不得了...18万条的数据,真是慢. 后来的想法是把所有的记录都读到一个list里,结果是mysql奔溃go ...

  8. jqmobile

    标准页面结构 <!DOCTYPE html> <html> <head> <title>Page Title</title> <lin ...

  9. javascript Error对象详解

    今天谈一下在IE浏览器下返回执行错误的Javascript代码所在的问题.其中在IE浏览器下,如果你使用了try-catch,那么当出现异常的时候,IE浏览器会传递一个Error对象. ~~~怎么通过 ...

  10. XML中SystemID和PublicID的区别

    http://hi.baidu.com/binboot007/item/1533f91d52113d7c7b5f259c http://supportweb.cs.bham.ac.uk/documen ...