java基礎筆記 常用類3 比較器,System,大數類
阿新 • • 發佈:2021-12-02
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