Java比较器

本文介绍了Java中如何对对象进行排序,主要涉及两种方式:Comparable接口的自然排序和Comparator接口的定制排序。通过自定义类实现Comparable接口,重写compareTo方法,可以实现对象的自然排序。此外,通过创建Comparator实例并重写compare方法,可以按特定规则对对象进行定制排序。示例代码展示了如何根据商品的价格和名称进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概述

Java中的对象,正常情况下,只能进行比较:==或 != 。不能使用 >或<的,但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。 如何实现?使用两个接口中的任何一个:Comparable或 Comparator

Java实现对象排序的方式有两种:
自然排序:java.lang.Comparable
定制排序:java.util.Comparator
 

2.Comparable自然排序举例

import org.junit.Test;
import java.util.Arrays;

public class CompareTest {

    /**
     * 4.对于自定义类来说,如果需要排序,我们可以让自定义类实现
Comparable接口,重写compareTo(obj)方法。
     *   在compareTo(obj)方法中指明如何排序
     */
    @Test
    public void test2(){
        Goods[] arr = new Goods[5];
        arr[0] = new Goods("lenovoMouse",34);
        arr[1] = new Goods("dellMouse",43);
        arr[2] = new Goods("xiaomiMouse",12);
        arr[3] = new Goods("huaweiMouse",65);
        arr[4] = new Goods("microsoftMouse",43);

        Arrays.sort(arr);

        System.out.println(Arrays.toString(arr));
    }

}

3.自定义类实现Comparable

import java.util.Arrays;
import java.util.Comparator;


public class ComporableText {
    public void frist(){
        Goods[] arr = new Goods[4];
        arr[0] = new Goods("yongli",14);
        arr[1] = new Goods("aiguo",20);
        arr[2] = new Goods("deren",14);
        arr[3] = new Goods("bugai",4);

        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        Arrays.sort(arr, new Comparator() {
//            商品由小到大排列,如有价格一样则比较名称
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof Goods && o2 instanceof Goods){
                    Goods goods = (Goods) o1;
                    Goods goods1 = (Goods) o2;
                    if (goods.getMoney() == goods1.getMoney()){
                        return goods.getName().compareTo(goods1.getName());
                    }else{
                        return Double.compare(goods.getMoney(), goods1.getMoney());
                    }
                }
                throw new RuntimeException("输入类型不对");
            }
        });
        System.out.println(Arrays.toString(arr));
    }

    public static void main(String[] args) {
        ComporableText com = new ComporableText();
        com.frist();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值