• 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 + "]
    ";
    	}
    }
    

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

    首先写一个比较规则类实现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]
    ]









  • 相关阅读:
    unittest详解 跳过用例的执行(skip)
    python 3 HTMLTestRunner.py文件
    jmeter 如何获取一小时之前的时间戳
    python]用eval强制将字符串转换为字典变量时候出错:NameError: name 'null' is not defined[python]用eval函数 字符串转dict
    Spring Boot 引入自定义yml
    关于爬虫与反爬虫简略方案
    网络回路问题
    MySQL添加新用户、为用户创建数据库、为新用户分配权限
    Spring Boot 项目几种启动方式
    Spring Cloud 之 基础学习资料
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3294009.html
Copyright © 2020-2023  润新知