类型 没有必要在进行排序时先new一个a2对象 再通过对象调用排序方法 这个对象的生成多此一举
//直接指明是调用a2类的方法a2.pai()对数组进行排序 静态方法属于类
// 静态方法内不能使用this this是用于对象名.方法(){方法体里面指代对象名的} 静态方法不属于对象没有对象所以不能用this
//对数组进行排序的话肯定要把数组传参进方法中 因为静态方法不能通过对象名.pai()的this来指代数组 所以传参只能通过(括号内的形参) 即用形参列表表示要排序的数组
// 具体评判大小交给bi()方法来评判 所以形参一定是实现了a1接口的实现类 形参类型写接口名构成多态 以后所有a1的实现类都能用pai()方法排序
//排序方法中不考虑实现类怎么实现的接口 只需要认为bi()已经被按要求实现了
//具体如何实现等到定义实现类时 按照排序方法的需求再进行设计
//这里排序的思路是利用.bi(o)的返回值来判断大小 排序按由小到大 this比o大就返回正数 if(正数)就将this和o交换
// 不考虑bi()方法具体怎么比较和比较了什么 只规定返回正数就是this比o大 要交换 返回负数就是this比o小不换位置
for (int i = 0; i<a.length-1;i++){
//排序从index=0开始
for (int j = i+1;j<a.length;j++){
//将index元素和后面所有元素逐一比较 返回正数即比后面的元素大就交换位置
if (a[i
.bi(a[j
)>0) {
【C++|java使用comparable接口对非数字类型数组排序】a1 aa = a[i
;
a[i
= a[j
;
a[j
= aa;
// //另一种方式 冒泡法 思路:从左开始依次比较相邻两个元素 左大于右即交换 比较一轮 一轮结束最右侧就是最大的 下一轮再运算出第二大的 循环直至排序完成
// boolean ready;
// //优化 设置一个状态值
// for (int i =0; i<a.length; i++){
// ready = true;
// for (int j = 0;j<a.length-i-1;j++){
// if (a[j
.bi(a[j+1
)>0){
// a1 aa = a[j
;
// a[j
= a[j+1
;
// a[j+1
=aa;
// ready = false;
// //如果发生了交换 即左边比右边大 说明当前排序可能还没完全捋顺
//
// if (ready)break;
//如果在这一次for(j)循环中没有交换 , 即每一个左边元素都比右边元素小 比如下标0比下标1小 下标1比下标2小 那么下标0一定比下标2小
//每一个左边都比右边小 意味着数组整体从左往右从小到大排好了 break省略剩余的循环
//
//
public static void main(String[
args) {
a3[
x = {new a3(2)new a3(1)new a3(3);
//实现类a3的声明放在下面了 这里静态初始化了a3[
数组x
pai(x);
//对数组进行排序
System.out.println(x[0
.id);
System.out.println(x[1
.id);
System.out.println(x[2
.id);
//结果 1 2 3
class a3 implements a1{
//类a3 实现 接口a1
int id;
public a3(int id) {
this.id = id;
public int bi(Object a){
//重写接口的方法 思路是通过.id的值来定大小
- 荣耀|探讨为何有些人是5G手机,却没有使用5G网络呢?
- QQ没付费,微信有可能“付费”?假如需要交钱使用,你会放弃吗?
- C++|大数据“扫黄”来了?符合此类特征的,你可能“涉黄”了!
- iqoo|iPhone6s是2015年的旗舰手机,把它作为备用机使用,划不划算呢?
- 联想|两款适合商务人士使用的电脑:华硕灵耀X14亮点十足,联想Y14s不甘示弱!
- C++|中国“流氓软件”,股价从750亿跌至145亿,终于付出了巨大代价!
- 英特尔|英特尔之所以不使用5nm和7nm技术生产芯片,应该是另有原因
- Java|中国知名“流氓软件”,股价从750亿跌至145亿,终于付出了代价!
- 电池|六款超值的12G+256G手机,1899元就能入手一台,长期使用不卡顿
- 神舟不仅在游戏本上拥有高性价比的口碑|神舟优雅x5-2021s7与平面设计工作者使用