接着说关于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接口的更多相关文章

  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. result 相关

    1.dispatcher 2.redirect 3.chain 4.redirectAction 5.freemarker 6.httpheader 7.stream 8.velocity 9.xsl ...

  2. 根据checkBox或radio的勾选状态得到id数组

    $(function(){ var inputs = document.getElementsByTagName("input"); var realStrs = "&q ...

  3. 循环获取<ul>下拉列表的的值。进行对比,正确的家样式

    $(function () { //要对比的值     var mysqlanswer = $("#wds-mysqlcuranswer").val(); // topic-opt ...

  4. servlet三种实现方式之二继承GenericServlet开发

    servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第二种示例代码如下(已去掉包名): //这是第二 ...

  5. codeforces 622E. Ants in Leaves

    题目链接 给一棵有根树, 每个叶子节点上有一只蚂蚁. 在0时刻蚂蚁开始向上爬, 同一时刻, 除了根节点以外, 一个节点上面不能有2个蚂蚁. 问所有的蚂蚁都爬到根节点需要的最短时间. 因为除了根节点, ...

  6. 《刺杀金正恩》1080p全高清无水印,附中文字幕 bt种子下载,附字母(百度网盘/360云盘)

    <刺杀金正恩>1080p全高清无水印,附中文字幕下载(百度网盘/360云盘) 种子和字幕下载地址: thunder://QUFlZDJrOi8vfGZpbGV8JUU5JTg3JTg3JU ...

  7. php文件链接数据库基本代码

    <?php $conn=@mysql_connect("localhost","root",""); if($conn==null) ...

  8. 转: bower 客户端库管理工具

    概述 常用操作 库的安装 库的搜索和查看 库的更新和卸载 列出所有库 配置文件.bowerrc 库信息文件bower.json 相关链接 概述 注:bower下载安装依赖库实际上是使用git进行下载. ...

  9. Android JNI入门第五篇——基本数据类型使用

    前面讲到了java和native数据类型,这里就开始做一下使用: 第一步:新建工程 第二部:书写 java方法: public class NativeMethod { static { System ...

  10. PHP程序猿必须学习的第二课——站点安全问题预防

    作为PHP程序猿.第一课我们学习了基本的语法.那么在熟悉基本的语法之后我们应该学些什么呢?我觉得是安全问题.安全问题基于一个站点宛如基石,一着不慎,意味着灾难性的事故. 这里主要就提三点最简单,也是最 ...