java模拟Arrays.sort实现自定义排序

        给你一连串数字要你排序,你可能觉得小case,如果我这里有一个图书类别,图书类的成员变量有:书名、价格、作者等等

要求你根据图书价格升序排序打印所有图书信息,你会怎么做呢?

       咱们可以在图书类里面定义一个compare 方法   

            int compare(Book book){

                return   price-book.price

             }

       如果返回值大于零 说明调用者的 price 要更大 ,小于零说明方法体里的参数要更大

       咱们再建一个MyArrays类,定义一个排序方法给咱们的book排序

        思路有了,下面咱们开始写代码吧,为了达到扩展效果,以便于别人都可以使用你写的代码,咱们先建一个MyCompareble

接口。

public interface MyComparable {
    //>0调用者大   <0参数大 ==0一样大
    public int compare(Object a);
}

因为我希望所有类都可以实现这个接口并使用其方法,这里参数类型我是用了Object,Object是所有类的父类,object对象可以指向任意对象。这里我们让Book类实现这个接口:

public class Book implements MyComparable{
	private String bookName;
	private int price;
	public Book() {
		super();
	}
	public Book(String bookName, int price) {
		super();
		this.bookName = bookName;
		this.price = price;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Book [bookName=" + bookName + ", price=" + price + "]";
	}
	@Override
	public int compare(Object a) {
		Book b=(Book)a;
		return this.price-b.price;
	}
	
}
好,我们已经实现了MyCompareble接口并重写了 compare方法,我们再建个MyArrays类,并写好排序方法:
public class MyArrays {
    //排序,Object是所有类的父类,object对象可以指向任意对象
    public static void sort(Object[] objs){
        for(int j=0;j<objs.length-1;j++){
            for(int i=objs.length-1;i>j;i--){
                MyComparable a=(MyComparable)objs[i];
                MyComparable b=(MyComparable)objs[i-1];
                if(a.compare(b)<0){
                    //都能用这段代码
                    Object temp=objs[i];
                    objs[i]=objs[i-1];
                    objs[i-1]=temp;
                }
            }
        }
    }
}

功能已经完善了,咱们来测试下:

public class Demo {
    public static void main(String[] args) {
        Book[] books=new Book[]{
                new Book("C",23),
                new Book("Java",109),
                new Book("Other",10)
        };
        MyArrays.sort(books);
        display(books);

    }

    public static void display(Object[] objs){
        for(int i=0;i<objs.length;i++){
            System.out.println(objs[i]+"");
        }
    }
}

效果如下图:

该图书已经按价格排好序了,咱们写的排序是通用的,不管你是book类还是学生类,都可以使用。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值