JAVA学习之路---Comparer 三种 用于对象 比较的 排序方法

第一种:;利用冒泡排序,创建一个 可以接收任意类型参数 和 自定义排序规则的 方法 

第一步,创建冒泡排序

import java.util.ArrayList;
//创建一个SorUilt类,并加入一个泛型参数
public class SortUilt <Y>{
    //定义一个返回ArrayList值的方法,要求传入需要排序ArrayList,和一个自定义方法
    public ArrayList<Y> sortList(ArrayList<Y> list,ComparerTo cmp){
        //利用for循环进行比较和重新排序
        for (int i = 0; i <list.size()-1 ; i++) {
            for (int j = 0; j <list.size()-1-i ; j++) {
                //自己定义排序方法 和 排序规则,然后传回一个boolean                boolean result = cmp.Comparer(list.get(j),list.get(j+1));
                //如果为true 则俩个排序对象交换位置
                if (result){
                    Y tmp = list.get(j);
                    list.set(j,list.get(j+1));
                    list.set(j+1,tmp);
                }
            }
        }
        return list;
    }
}
第二步,创建一个自定义拥有范型参数的接口,添加一个方法,用来自定义排序规则
// 定义一个有范型参数的interface类,并规定一个返回boolean值的Comparer方法
public interface ComparerTo <T>{
    public boolean Comparer(T t1,T t2);
}
第三步,实现第二步接口中的方法,完善自定义排序规则
 
//实现ComparerTo接口方法,并输入一个需要进行排序的参数类型,我这里传入的Product
public class ComparerToImpl implements ComparerTo <Product>{
    @Override
    //传入俩个Product对象进行自定义比较
    public boolean Comparer(Product t1, Product t2) {
        //如果t1的价格比t2小,则返回true否则返回false
        if (t1.getPdtPrice() < t2.getPdtPrice()){
            return true;
        }
        return false;
    }
}
第四步,创建一个测试类,用来调用排序方法
public static void main(String[] args) throws Exception{

    //创建一个自定义类型的ArrayList
    ArrayList<Product> pdtList = new ArrayList<>();
    //新建一个SortUilt对象sortUilt  注:SortUilt为之前创建的类,里面放着排序规则
    SortUilt<Product> sortUilt = new SortUilt<>();
    //调用sortUilt中的sortList方法,并传入ArrayList参数,和 ComparerTo接口的实现类
    sortUilt.sortList(pdtList,new ComparerToImpl());

第二种:利用JAVA中现成的 排序接口  Comparable,然后实现接口方法,加入自己想要实现的排序规则


第一步:创建一个对象,并为这个对象赋予一些可以进行比较的属性,导入Comparerble接口,并实现接口中的方法,在方法中自定义排序规则

//创建一个Product类,并赋予独特的属性,导入Comparerble接口
public class Product implements Comparable<Product>{

    private String pdtId;
    private String pdtName;
    private int pdtNumber;
    private float pdtPrice;

    public Product(){

    }

    //自己定义的一个方法,用来获取Product对象 的订单总金额 = 数量 * 价格
    public float getAmountPrice(){
        float amount = (float) this.pdtNumber * this.pdtPrice;
        return amount;
    }

    //实现Comparerble接口的方法,方法返回值为int类型,规定:大于返回1,等于返回0,小于返回-1
    @Override
    public int compareTo(Product o) {
        //自定义排序规则
        if (this.getAmountPrice() < o.getAmountPrice()){
            return 1;
        }
        return -1;
第二步,检验方法是否可用

public class txtClass {
    //新创建一个类,来看看自定义Comparerble方法是否好用
    public static void main(String[] args) throws Exception{
        
        //创建一个ArrayList用来装Product对象
        ArrayList<Product> pdts = new ArrayList<>();
        //创建几个Product对象数据,用来排序
        pdts.add(new Product("p1","苹果",3.5f,5));
        pdts.add(new Product("p2","香蕉",2.5f,10));
        pdts.add(new Product("p3","",4.2f,3));
        
        //调用上一步定义好的的Conparerble接口方法
        Collections.sort(pdts);
        //输出排序后的数组结果
        for (Product pdt:pdts) {
            //直接输出的话,需要在Product中加入toString方法噢,要不然需要单个属性打印~~~
            System.out.println(pdt);
        }

    }

第三种:直接调用Collections中的sort方法,这个方法需要你传入一个你要排序的数组,和定义他附带的一个接口,你可以在接口中 去编辑自己喜欢的排序规则

public class txtClass {
    //新创建一个类,来看看自定义Comparerble方法是否好用
    public static void main(String[] args) throws Exception{

        //创建一个ArrayList用来装Product对象
        ArrayList<Product> pdts = new ArrayList<>();
        //创建几个Product对象数据,用来排序
        pdts.add(new Product("p1","苹果",3.5f,5));
        pdts.add(new Product("p2","香蕉",2.5f,10));
        pdts.add(new Product("p3","",4.2f,3));
        
        //调用Collections中的sort方法,这个方法需要你传入一个待排序的数组,并需要你在他附带的排序接口中去定义排序规则
        //相比较前俩种方法,这种方法是我最喜欢用的,哈哈
        Collections.sort(pdts, new Comparator<Product>() {
            @Override
            public int compare(Product o1, Product o2) {
                if (o1.getAmountPrice() < o2.getAmountPrice()){
                    return 1;
                }
                return -1;
            }
        });
注:粘贴的代码中,有的显示为有红色下划线的报错状态,请不要在意,代码是本人亲自编写并检验过的,绝对正确,这里只简单的说了下怎么实现,没有什么代码健壮性可言,我也是刚刚开始学习JAVA,有错误的地方还请各位大佬指出,小弟万分感谢~      不喜勿喷
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值