ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

常用类-Java比较器

2022-07-12 08:33:55  阅读:160  来源: 互联网

标签:常用 Goods Java name price public arr1 new 比较


一、Comparable接口

Java中的对象,正常情况只能进行比较 == 或 !=不能使用 > 或 < 的,但是在实际开发中有需要进行对象的比较 comparable接口的使用举例: 1.像String、包装类等实现了comparable接口,重写了comparableTo(obj)方法,给出了比较两个对象大小的方式 2.像String 、包装类重写comparableTo(obj)方法以后,进行了从小到大的排列 3.重写comparableTo(obj)的规则 如果当前对象this大于形参对象obj,则返回正整数 如果当前对象this小于形参对象obj,则返回负整数 如果当前对象this等于形参对象obj,则返回零 4.对于自定义类来说,如果需要排序,我们可以让自定义类实现comparable接口,重写compareTo() 在comparableTo(obj)方法中指明如何排序 测试单元代码如下:
点击查看代码
@Test
    public void test1(){
        Goods[] arr1 = new Goods[5];
        arr1[0] = new Goods("lenovoMouse",35);
        arr1[1] = new Goods("huaweiMouse",65);
        arr1[2] = new Goods("dellMouse",43);
        arr1[3] = new Goods("xiaomiMouse",21);
        arr1[4] = new Goods("mircsoftMouse",65);
        Arrays.sort(arr1);
        System.out.println(Arrays.toString(arr1));
    }
Goods类代码如下:
点击查看代码
package com.Tang.StringDay02;

public class Goods implements Comparable{
    private String name;
    private double price;
    public Goods() {
    }
    public Goods(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "name='" + name + '\'' +
                ", price=" + price + '\n';
    }
    //指明商品比较大小的方式:按价格从低到高排序,价格相同按名称从高到低排
    @Override
    public int compareTo(Object o) {
        if (o instanceof  Goods){//判断是不是一个商品
            Goods goods = (Goods)o;//是商品的就进行转换
            //方式一:
            if(this.price > goods.price)
                return 1;
            else if(this.price < goods.price)
                return -1;
            else
                return -this.name.compareTo(goods.name);
            //按价格排序方式二
//            return Double.compare(this.price,goods.price);

        }
        throw new RuntimeException();
    }

}

运行结果图

二、Comparator实现定制排序

点击查看代码
@Test
    public void test3(){
        Goods[] arr1 = new Goods[5];
        arr1[0] = new Goods("lenovoMouse",35);
        arr1[1] = new Goods("huaweiMouse",65);
        arr1[2] = new Goods("dellMouse",43);
        arr1[3] = new Goods("huaweiMouse",21);
        arr1[4] = new Goods("mircsoftMouse",65);
        //指明商品比较大小的方式:按名称从低到高排序,名称相同按价格从高到低排
        Arrays.sort(arr1, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof Goods && o2 instanceof Goods){
                    Goods g1 = (Goods) o1;
                    Goods g2 = (Goods) o2;
                    if(g1.getName() == g2.getName()){
                        return -Double.compare(g1.getPrice(),g2.getPrice());
                    }
                    else{
                        return g1.getName().compareTo(g2.getName());
                    }
                }
                throw new RuntimeException("输入数据类型不一致");
            }
        });
        System.out.println(Arrays.toString(arr1));
    }

运行结果图

标签:常用,Goods,Java,name,price,public,arr1,new,比较
来源: https://www.cnblogs.com/twq46/p/16468627.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有