java-比较对象大小的方法

关于对象值大于、等于、小于的比较:

一,基本数值类型(int ,char,short,long,float,double )对象的大小比较可以直接使用比较运算符:> >= < <= == !=。

二,引用类型对象无法用数值去衡量其大小,故可使用(Object.equals ,Comparable,Comparator)去比较引用类型。

java-比较对象大小的方法_第1张图片

1,Object.equals:只能比较两个对象是否相等。

该方法和==的作用不完全相同,当比较引用类型大小时多使用equals方法。

p == q 表示的是 p 和 q 两个引用指向同一个对象。

p.equals(q) 表示 p 指向的对象 和 q 指向的对象是否是值语义相等的。

使用方法:Object类实现了该方法,当使用该方法时需要覆写该方法。

1. 如果指向同一个对象,返回 true

2. 如果传入的为 null,返回 false

3. 如果传入的对象类型不是同一类型,返回 false

4. 按照类的实现目标完成比较。

2,Comparable-基于自然顺序:当一个类实现了该接口后,需要实现compareTo方法。当比较该类的对象时直接调用compareTo方法即可。

p.compareTo(q):返回值类型为整数,

当返回值为正数时:p>q

当返回值为负数时:p

当返回值为零时:p=q

3,Comparator基于比较器:需要自定义一个比较类去继承该接口,比较类需要实现compare方法。对该比较类对象实例化后,比较引用类型直接调用比较类的compare方法即可。

comparator.compare(p,q):返回值类型为整数,

当返回值为正数时:p>q

当返回值为负数时:p

当返回值为零时:p=q

三,比较类和 java 集合框架的配合

1. 使用 contains 类似的方法,内部基本在调用元素的 equals 方法,所以要求元素覆写过 equals 方法

2. 使用 HashMap,key 的比较内部会调用 equals 方法,所以要求元素覆写过 equals 方法

3. 使用排序相关方法,内部需要进行比较,所以或者选择实现 Comparable 或者传入一个 Comparator

4. 使用 TreeMap,key 需要进行大小比较,所以或者选择实现 Comparable 或者传入一个 Comparator

四:应用

Student类:

1,属性:

public class Student {//implements Comparable {
     String name;
    int age;
    int height;

    public Student(String name, int age, int height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }


    public  int compareTo(Student o) {
        if(name.compareTo(o.name)!=0){
            return name.compareTo(o.name);
        }else if(age-o.age!=0){
            return age-o.age;
        }else{
            return height-o.height;
        }
    }

    @Override
    public String toString() {
        return  String.format("[name:%s age:%d height:%dcm]",name,age,height);
    }
}

比较实现:github:https://github.com/bobobo00/StudentCompare.git

Book类:

1,属性

public class Book {
    String ISBN;
    String author;
    String bookname;
    double bookprice;
    int numsales;
    int numcommets;

    public Book(String ISBN, String author, String bookname, double bookprice, int numsales, int numcommets) {
        this.ISBN = ISBN;
        this.author = author;
        this.bookname = bookname;
        this.bookprice = bookprice;
        this.numsales = numsales;
        this.numcommets = numcommets;
    }

    public Book() {
    }

    @Override
    public String toString() {
        return String.format("[ISBN:%s author:%s bookname:%s bookprice:%.4f元 numsales:%d本 numcommet:%d个 ]",ISBN,author,bookname,bookprice,numsales,numcommets);
    }
}

比较实现:github:https://github.com/bobobo00/BookCompare.git

 

 

 

你可能感兴趣的:(JavaSE和数据结构)