对象数组想要排序 那么对象对应的类必须实现 Comparable接口
覆写CompareTo方法 自己定义排序的规则
一旦实现比较器接口 覆写CompareTo方法image.pngimage.png
那么调用Arrays.sort方法时 会自动 挨个一次拿出两个元素 去调用compareTo方法 进行比较
如果compareTo方法返回0 表示当前两个元素相等 那么顺序不变
如果compareTo方法 返回正整数 表示后面的元素比前面的大 不交换位置
如果compareTo方法 返回负整数 表示后面的元素比前面的小 交换位置

  1. 如果对象数组里面对象对应的类 不是我们自己写的 无法更改源代码<br /> 但是当前对象数组需要 进行 排序 该如何处理?<br /> **自己定义一个专门比较的类, 该类实现Comparator接口**<br />**比较器接口加上泛型以后 参数就变成泛型对应的类型 省去强转**![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655881049631-7a94d6be-a457-4742-acfe-14fba3995d89.png#clientId=u883c032d-9321-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=43&id=uc65b9778&margin=%5Bobject%20Object%5D&name=image.png&originHeight=54&originWidth=569&originalType=binary&ratio=1&rotation=0&showTitle=false&size=10196&status=done&style=none&taskId=u4ecafa26-8b4f-4488-a344-22ebe19dc75&title=&width=455.2)<br />** 覆写compare 方法 进行两个对象比较**<br /> 然后 调用Arrays.sort方法时 使用重载的方法 第二个参数传入第三方比较类的对象即可![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655881061279-15554897-b673-42cb-86ea-36a4bd384cab.png#clientId=u883c032d-9321-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=293&id=ub2a6bfbf&margin=%5Bobject%20Object%5D&name=image.png&originHeight=366&originWidth=640&originalType=binary&ratio=1&rotation=0&showTitle=false&size=98729&status=done&style=none&taskId=ua6e5d34c-a325-4959-8b33-3f5c3aa61fb&title=&width=512)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655881019012-7f53b03e-d4d0-431e-8c20-a9b1358acf30.png#clientId=u883c032d-9321-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=362&id=ue4abaed4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=452&originWidth=766&originalType=binary&ratio=1&rotation=0&showTitle=false&size=180765&status=done&style=none&taskId=ucf1c6308-4764-4fb9-b074-656eba08a89&title=&width=612.8)

总结:

可更改源代码的情况下 必须实现 Comparable接口
一但实现Comparable接口 覆写CompareTo方法
自己定义排序的规则

不可更改源代码的情况下 采用第三方类
该类实现Comparator接口 覆写 compare
自己定义规则

比较器接口加上泛型以后 参数就变成泛型对应的类型 省去强转