java基础笔记07 - 常用类3 比较器,System,大数类

4.Java比较器

绝大部分的运算符都是给基本数据类型用的,除了对String重写的几个

而实际中,可能需要对俩对象做比较,排序,其实还是根据某一个属性比较

4.1 Comparable接口

自然排序

要比较的对象实现Comparable接口,里面重写compareTo()方法

public class CompareTest {
    @Test
    public void compareTest() {
        Person[] ps=new Person[4];
        ps[0]=new Person(3,"wang");
        ps[1]=new Person(1,"zhao");
        ps[2]=new Person(4,"sun");
        ps[3]=new Person(1,"li");
        Arrays.sort(ps); //其实是重写sort方法里面比较的步骤,只不过抽象出来了
        System.out.println(Arrays.toString(ps));
    }
}
class Person implements Comparable{
    private int  age;
    private String name;
    public Person(int age,String name){
        this.age=age;
        this.name=name;
    }
    //重写toString方法,方便打印数组
    @Override
    public String toString(){
        return "Person{name='"+name+'\''+ ",age="+age+ '}';
    }
    //重写比较
    @Override
    public int compareTo(Object o) {
        if(o instanceof Person){
            Person p=(Person) o;
            //方式一:
            if(this.age>p.age){
                return 1;
            }else if(this.age==p.age)   {
                return this.name.compareTo(p.name);
            }
            return -1;
            //方式2:
            //return Integer.compare(this.age,p.age);
        }
        throw new RuntimeException("数据类型不一致");
    }
}

4.2 Comparator接口

定制排序

场景:

​ 元素的类就没有实现Comparable接口,或者实现了,但是排序规则不想用

​ 从大到小看着不过瘾,还想按姓氏排序

重写compare(Object o1,Object o2)方法

//结构体同上
Arrays.sort(ps, new Comparator() {//这里用泛型了,下面就不用判断instanceof了
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof Person && o2 instanceof Person){
                    return ((Person) o1).name.compareTo(((Person) o2).name);
                }
                throw new RuntimeException("数据类型不一致");
            }
        });

//用泛型的话
 Arrays.sort(ps, new Comparator<Person>() {//这里用泛型了,下面就不用判断instanceof了
            @Override
            public int compare(Person p1, Person p2) {
                if(p1 != null && p2 != null){
                    return p1.name.compareTo(p2.name);
                }
                throw new RuntimeException("数据类型不一致");
            }
        });

//用了lambda表达式
Arrays.sort(ps, (o1, o2) -> {
    if (o1 != null && o2 != null) {
        return (o1).name.compareTo((o2).name);
    }
    throw new RuntimeException("数据类型不一致");
});

5. System类

java.lang.System、

属于系统级别的功能方法,所以构造方法是private的,成员和方法都是static的

属性其实就仨,err,in,out 都是IO流的东西

方法:

currentTimeMillis();

exit(int status);

void gc();//请求垃圾回收,但是jvm不一定立即回收

String getProperty(String key);//获得系统的各种属性
//key包括:"java.version"  "java.home"  "os.name"  "os.version"  "user.name"  "user.home"  "user.dir"用户的当前工作目录

6.Math类

java.lang.Math

一系列的静态方法

7. BigInteger和BigDecimal

很少用到吧,但是面试会用呢

7.1 BigInteger

Integer最大2^32-1 Long 也是有限的

但是BigInteger 可以表示不可变的任意精度的整数

盲猜是个数组。。。

7.2 BigDecimal

防止double的精度不够,比如商业计算

BigDecimal对应的是浮点型,可以表示不可变得任意精度的有符号十进制定点数

盲猜是俩数组。。。

7.3方法

构造器,参数可以使String

还有加减乘除方法

posted @ 2021-12-02 21:43  荧惑微光  阅读(36)  评论(0编辑  收藏  举报