• JAVA排序(一) Comparable接口


    昨天接到一个实习公司的电话面试,来的很突然,没有准备。

    由于以前没用过,在被他问及是否用过JAVA的排序工具Comparable与Comparator时,没有回答上来,只能实话实说没有用过。

    感觉太丢人了~~回去赶紧看看,现在将学到的东西记录下来,同大家分享~~

    先说Comparable接口,public interface Comparable<T>。当需要根据类中的成员变量对类进行排序时,只需实现该接口,覆写compareTo方法即可非常方便~~

    该接口中只有一个方法--int compareTo(T o);

    在该方法中可以自己定义成员变量大小“规则”,这里举的例子是降序排列,该方法根据比较的结果(大于、等于、小于)返回整型(-1,0,1)。如下:

    	@Override
    	public int compareTo(EnvironmentForm env) {
    		//大于所给温度则返回-1
    		if(this.temp>env.getTemp()){
    			return -1;
    		}else if(this.temp<env.getTemp()){
    			//小于所给温度返回1
    			return 1;
    		}else{
    			//大于所给湿度返回-1
    			if(this.hum>env.getHum()){
    				return -1;
    			//小于所给湿度返回1
    			}else if(this.hum<env.getHum()){
    				return 1;
    			}
    		}
    		return 0;
    	}

    然后通过Arrays类的静态方法--public static void sort(),完成排序。

    下面是具体的实现:

    首先是自定义一个简单的环境类,包括成员变量(温度、湿度),实现Comparable接口;

    public class EnvironmentForm implements Comparable<EnvironmentForm>{
    	/**温度*/
    	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 EnvironmentForm(){}
    	/**
    	 * 有参构造
    	 * @param temp 温度
    	 * @param hum 湿度
    	 */
    	public EnvironmentForm(float temp, float hum) {
    		super();
    		this.temp = temp;
    		this.hum = hum;
    	}
    	@Override
    	public String toString() {
    		return "EnvironmentForm [温度=" + temp + ", 湿度=" + hum + "]
    ";
    	}
    	@Override
    	public int compareTo(EnvironmentForm env) {
    		//大于所给温度则返回-1
    		if(this.temp>env.getTemp()){
    			return -1;
    		}else if(this.temp<env.getTemp()){
    			//小于所给温度返回1
    			return 1;
    		}else{
    			//大于所给湿度返回-1
    			if(this.hum>env.getHum()){
    				return -1;
    			//小于所给湿度返回1
    			}else if(this.hum<env.getHum()){
    				return 1;
    			}
    		}
    		return 0;
    	}
    }

    在主方法中实现温度的降序排列,当温度相等时,进行湿度的降序排列

    package com.example;
    
    import java.util.Arrays;
    public class ComparaTestMain {
    	public static void main(String[] args) {
    		EnvironmentForm env[] = {new EnvironmentForm(27.5f,50.1f),
    				new EnvironmentForm(27.5f,60.1f),
    				new EnvironmentForm(27.5f,40.1f),
    				new EnvironmentForm(17.5f,50.1f),
    				new EnvironmentForm(37.5f,50.1f)};
    		System.out.println("********排序前********");
    		System.out.println(Arrays.toString(env));
    		System.out.println("********排序后********");
    		Arrays.sort(env);
    		System.out.println(Arrays.toString(env));
    	}
    }

    下面为运行结果:

    ********排序前********
    [EnvironmentForm [温度=27.5, 湿度=50.1]
    , EnvironmentForm [温度=27.5, 湿度=60.1]
    , EnvironmentForm [温度=27.5, 湿度=40.1]
    , EnvironmentForm [温度=17.5, 湿度=50.1]
    , EnvironmentForm [温度=37.5, 湿度=50.1]
    ]
    ********排序后********
    [EnvironmentForm [温度=37.5, 湿度=50.1]
    , EnvironmentForm [温度=27.5, 湿度=60.1]
    , EnvironmentForm [温度=27.5, 湿度=50.1]
    , EnvironmentForm [温度=27.5, 湿度=40.1]
    , EnvironmentForm [温度=17.5, 湿度=50.1]
    ]





  • 相关阅读:
    归档拷贝LogMiner 和 archived redo log,分析归档日志
    宋体测试液晶屏测试小程序
    宋体方法Unity3d通过苹果和google两种方法加入广告
    代码确认小米官方在线预定——对代码实现的分析
    分区启动Grub2配置详解
    临时表判断sqlite 判断表 或 临时表 是否存在
    解释升级JDeveloper&ADF的版本
    引用字符shell中的引用java教程
    枚举生成MVC3: Bind Enum To DropDownList ?java教程
    能力学习为什么你应聘不上或试用期被开?
  • 原文地址:https://www.cnblogs.com/james1207/p/3291974.html
Copyright © 2020-2023  润新知