zoukankan      html  css  js  c++  java
  • 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]
    ]





  • 相关阅读:
    Linux 安全工具之extundelete误删除恢复
    Linux安全工具之fail2ban防爆力破解
    构建高效安全的Nginx Web服务器
    必读说明
    U盘因格式化 NTFS 中断造成无法识别,生产平台同样无法识别的修复处理方案
    计算机等级考试【二级C语言程序设计】知识点整理
    MD 使用 i5ting_toc 转换成 HTML
    Windows10 图标变白修复
    【已解决】老型号电脑需要按F1键才能进入系统
    【已解决】什么是心跳包?
  • 原文地址:https://www.cnblogs.com/james1207/p/3291974.html
Copyright © 2011-2022 走看看