昨天接到一个实习公司的电话面试,来的很突然,没有准备。
由于以前没用过,在被他问及是否用过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] ]