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]
]
JAVA排序(一) Comparable接口的更多相关文章
- Java自定义排序:继承Comparable接口,重写compareTo方法(排序规则)
代码: 1 import java.util.*; 2 3 /** 4 * 学习自定义排序:继承Comparable接口,重写compareTo方法(排序规则). 5 * TreeMap容器的Key是 ...
- Java基础 TreeSet()来实现数组的【定制排序】 : Comparable接口(自然排序) 或者 Comparator接口 (定制排序)
笔记: //排序真麻烦!没有C++里的好用又方便!ORZ!ORZ!数组排序还还自己写个TreeSet()和( Comparable接口(自然排序) 或者 Comparator接口 (定制排序))imp ...
- Java中的Comparable接口和Comparator接口
Comparator位于包java.util下,比较器,是在集合外部定义排序.Comparable位于包java.lang下,代表当前对象可比较的,是在集合内部实现排序. Comparable代表一个 ...
- TreeSet集合的自然排序与比较器排序、Comparable接口的compareTo()方法
[自然排序] package com.hxl; public class Student implements Comparable<Student> { private String n ...
- Java中的comparable接口和Comparator接口的区别
一.comparable和Comparator的区别 1.Comparable和Comparator都是用来实现集合中元素的比较.排序的. 2.Comparable是在类内部定义的方法实现的排序,位于 ...
- Java - 谨慎实现Comparable接口
类实现了Comparable接口就表明类的实例本身具有内在的排序关系(natural ordering). 因此,该类可以与很多泛型算法和集合实现进行协作. 而我们之需要实现Comparable接口唯 ...
- Java基础之Comparable接口, Collections类,Iterator接口,泛型(Generic)
一.Comparable接口, Collections类 List的常用算法: sort(List); 排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个 ...
- java中的Comparable接口
类对象之间比较"大小"往往是很有用的操作,比如让对象数组排序时,就需要依赖比较操作.对于不同的类有不同的语义.如Student类,比较2个学生对象可以比较他们的score分数来评判 ...
- java中实现Comparable接口实现自定义排序
class Student implements Comparable{ String name; int gpa; @Override public int compareTo(Object arg ...
随机推荐
- Intellij IDEA+Maven+SpringMVC+HiBernate
转载请注明出处:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生). 访问GitHub下载最新源码:https://github.com/gaussic/SpringMVCDemo
- 浅谈C中的指针和数组(三)
上一个博客我们得到了一个结论: 指针和数组根本就是两个完全不一样的东西.只是它们都可以“以指针形式”或“以下标形式”进行访问.一个是完全的匿名访问,一个是典型的具名+匿名访问.一定要注意的是这个“以X ...
- C#时间日期操作
一.C# 日期格式 DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 dt.ToFileTime().ToString() ...
- php的cURL库介绍
cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.很多小偷程序都是使用这个函数.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的 ...
- xsqlbuilder使用说明
动态构造sql的利器:rapid-xsqlbuider详细说明 特性列表: 动态构造sql条件语句,提供sql拼接与使用占位符两种方式 数据类型的修饰 对SQL注入攻击的防范 问题: 手工构造SQL语 ...
- inline-block代替浮动布局float:left列表布局最佳方案
基于各位前辈的辛勤劳动,下面得出使用inline-block替换float:left;的最佳方案. html代码 <div class="list"> <ul&g ...
- Windows的历史zt
原文地址:http://windows.microsoft.com/zh-CN/windows/history#T1=era0 1975–1981:Microsoft 起步 Microsoft 联合创 ...
- MVC自学第四课
处理表单 前面的列子我们已经把表单提交给了HomeControllers类中的RsvpForm动作方法,只是在这个动作方法内,我们并没有做什么具体的逻辑处理,而是直接返回一个 “Thanks”的视图. ...
- 游标-----内存中的一块区域,存放的是select 的结果
游标-----内存中的一块区域,存放的是select 的结果 游标用来处理从数据库中检索的多行记录(使用SELECT语句).利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集 ...
- Android 天天爱消除辅助
简介 <天天爱消除>是一款移植于手游的消除类益智游戏,该游戏只有通过手机登录QQ跟微信才能进行,这样一来这款游戏必然会大红大紫. 功能 开发Android自动化触屏事件,录制操作脚本,实现 ...