/**
* 使用comparable接口对数组排序
* 数组元素不是数字类型时 通过实现comparable接口重写规定比较方法 依据比较方法进行Arrays.sort()
*/
public class TestComparable implements Comparable{
//实现Comparable接口
private int id;
private int age;
private String name;
//每个对象三个属性 设想通过比较age来对对象排序
public TestComparable(){
public TestComparable(int id int age String name) {
this.id = id;
this.age = age;
this.name = name;
@Override
public int compareTo(Object o) {
//重写实现compareTo()方法
TestComparable t = (TestComparable)o;
//将形参强制转型 形参o必须和接口的方法一致 形参类型改变的话不构成重写
//重写的方法名、形参列表必须相同
if (age<t.age){
return -1;
else if (age>t.age) {
return 1;
return 0;
@Override
public String toString() {
return \"\"+age;
//使打印对象println(TestComparable)时默认打印对象的age属性
//不能直接返回age 重写方法的返回值类型只能小于等于原返回值类型 int和String是 不相干的两种类型 不能更改成int
//没法更改返回值类型就必须将age前面加\"\"变成字符串
public static void main(String[
args) {
TestComparable[
t = {
new TestComparable(110\"Jack\")
new TestComparable(212\"Jim\")
new TestComparable(39\"Tom\")
;
//太长了 换行将结构变明显
Arrays.sort(t);
//sort()调用compareTo()方法 根据返回值决定是否调换处于比较中的两个元素的位置 反复调整后按顺序排好元素
System.out.println(Arrays.toString(t));
//静态方法Arrays.toString(t)会返回String.valueOf(t[i
)
//String.valueOf(t[i
) 判断如果元素为null就返回\"null\" 否则返回Object.toString
// 这里因为重写了toString 实际调用的是 t[i
.toString 返回age 结果[91012
//模拟sort()方法调用compareTo()排序的过程
interface a1{
//定义接口a1模拟Comparable接口
int bi(Object o);
//接口的抽象方法 先有接口后有实现类 现阶段没有写实现类 所以形参只能写Object类或a1 因为所有类都属于Object类 这样构成了多态
//返回值int的用法是 返回正数就认为在排序中this>o 返回负数就认为在排序中this<o 最后按照大小来排序
//这样规定的结果是排序方法不需要自己评判两个元素哪个大哪个小 只需要调用bi()方法 bi()会返回正数或负数告诉排序方法this大还是o大
// 排序方法看到正数就交换两个元素 看到负数就保持现状
//排序方法只负责根据bi()返回结果对顺序进行调整 具体如何大小如何评判由实现类来规定bi()
// 这样每个类都能有自己的评判标准 只需要按照接口和排序方法的要求格式写好bi()就能调用排序方法了
//接口负责注释通过bi()评判大小的思路 排序方法负责根据评判结果进行排序 实现类根据自己的情况选择各自的参数(年龄、身高、体重等等)作为bi()评判的标准
class a2{
public static void pai(a1[
a){
//模拟Arrays类的sort()方法 通过调用bi()的正负值来对元素排序 思路是如果返回正数即this>o就交换两个元素 返回负数即this<o顺序正确保持现状
//排序方法会对数组本身进行更改 所以运行完方法时实参数组已经改变了 不需要再特意返回更改的实参结果
//用static修饰 是因为要排序的数组是本类a2以外的类的数组 不是a2[
- 荣耀|探讨为何有些人是5G手机,却没有使用5G网络呢?
- QQ没付费,微信有可能“付费”?假如需要交钱使用,你会放弃吗?
- C++|大数据“扫黄”来了?符合此类特征的,你可能“涉黄”了!
- iqoo|iPhone6s是2015年的旗舰手机,把它作为备用机使用,划不划算呢?
- 联想|两款适合商务人士使用的电脑:华硕灵耀X14亮点十足,联想Y14s不甘示弱!
- C++|中国“流氓软件”,股价从750亿跌至145亿,终于付出了巨大代价!
- 英特尔|英特尔之所以不使用5nm和7nm技术生产芯片,应该是另有原因
- Java|中国知名“流氓软件”,股价从750亿跌至145亿,终于付出了代价!
- 电池|六款超值的12G+256G手机,1899元就能入手一台,长期使用不卡顿
- 神舟不仅在游戏本上拥有高性价比的口碑|神舟优雅x5-2021s7与平面设计工作者使用