1. 程式人生 > 其它 >java基礎筆記 常用類3 比較器,System,大數類

java基礎筆記 常用類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

還有加減乘除方法

本文來自部落格園,作者:熒惑微光,轉載請註明原文連結:https://www.cnblogs.com/yinghuoweiguang/p/15635519.html