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 + "]\n";

	}

	@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]

]




 


 

你可能感兴趣的:(comparable)