接着说关于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. c/c++处理参数

    直接上代码:涉及函数getopt(),getopt_long() #include <unistd.h> #include <stdlib.h> #include <st ...

  2. margin 属性的相关问题

    1.margin 的IE6 双边距问题 问题描述:浮动的块挨边框的时候会产生双倍的边距 解决方案: 1.增加display:inline; 2.去除float属性 2.margin 的重叠问题 CSS ...

  3. jQuery相关面试题

    1 你在公司是怎么用jquery的? 答:在项目中是怎么用的是看看你有没有项目经验(根据自己的实际情况来回答) 你用过的选择器啊,复选框啊,表单啊,ajax啊,事件等 配置Jquery环境 下载jqu ...

  4. 使用Maven完成自动化打包并部署到Linux服务器下(Tomcat7)

    最近在使用maven,顺便尝试了下tomcat部署.网上找到了很多资料但是都不是最新的,所以贴上比较新的Tomcat7部署代码和配置,方便以后回顾-->测试OK. 1. 首先是配置Tomcat ...

  5. 【MFC相关】MFC入门相关

    1.MFC的“匈牙利标识符命名法”,这是一个约定,可以增加代码的可读性: 声明或定义了一个类,那么这个类可以以“C”(class)为前缀,如CHelloWorldDlg类: 定义一个无符号型的局部变量 ...

  6. jQuery File Upload 插件 php代码分析

    jquery file upload php代码分析首先进入构造方法 __construct() 再进入 initialize()因为我是post方式传的数据  在进入initialize()中的po ...

  7. Protel99se教程九:protel99se中PCB设计的高级应用

    在上一节我们PCB资源网的protel99se教程当中,我们给大家讲解了在protel99se进行原理图设计中的一些高级应用技巧,在这一节protel99se教程当中,我们将给大家讲解的是,在prot ...

  8. VS前台设计中的缺陷

    程序的前台界面设计我一般都是Blend中完成的,因为在VS中前台比较难控制.而效果之内的就更不用说了.今天写了个小程序用来启动其他程序的.运行界面如下: 这是尺寸和距离刚刚好的,我们去Blend当中看 ...

  9. java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z

    我现在用的是hibernate3.6final,出现了下面这个异常:(当我使用@ManyToOne时,不会出现异常,而且用@ManyToMany也正常) Caused by: java.lang.No ...

  10. C#面向对象编程基础-喜课堂笔记

    **************[5][C#面向对象编程基础]第1讲:类与对象****************                 *************2.1.1_类与对象的概念**** ...