經常使用API - Arrays、Math、Object

Arrays類

概述

此類包含用來操做數組(好比排序和搜索)的各類方法。此類還包含一個容許將數組做爲列表來查看的靜態工廠。java

除非特別註明,不然若是指定數組引用爲 null,則此類中的方法都會拋出 NullPointerException數組

此類的方法都是靜態方法,經過類名直接調用安全

靜態方法

方法摘要 描述
static <T> List<T> asList(T... a) 返回一個受指定數組支持的固定大小的列表。
static int binarySearch(int[] a, int key) 使用二分搜索法來搜索指定的 int 型數組,以得到指定的值。
static int binarySearch(int[] a, int fromIndex, int toIndex, int key) 使用二分搜索法來搜索指定的 int 型數組的範圍,以得到指定的值。
static int[] copyOf(int[] original, int newLength) 複製指定的數組,截取或用 0 填充(若有必要),以使副本具備指定的長度。
static int[] copyOfRange(int[] original, int from, int to) 將指定數組的指定範圍複製到一個新數組。
static boolean equals(int[] a, int[] a2) 若是兩個指定的 int 型數組彼此相等,則返回 true。
static void fill(int[] a, int val) 將指定的 int 值分配給指定 int 型數組的每一個元素。
static void fill(int[] a, int fromIndex, int toIndex, int val) 將指定的 int 值分配給指定 int 型數組指定範圍中的每一個元素。
static void sort(int[] a) 對指定的 int 型數組按數字升序進行排序。
static void sort(int[] a, int fromIndex, int toIndex) 對指定 int 型數組的指定範圍按數字升序進行排序。
static String toString(int[] a) 返回指定數組內容的字符串表示形式。
static boolean deepEquals(Object[] a1, Object[] a2) 若是兩個指定數組彼此是深層相等 的,則返回 true。
static int deepHashCode(Object[] a) 基於指定數組的「深層內容」返回哈希碼。
static String deepToString(Object[] a) 返回指定數組「深層內容」的字符串表示形式。
static void sort(T[] a, Comparator<? super T> c) 根據指定比較器產生的順序對指定對象數組進行排序。
static void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c) 根據指定比較器產生的順序對指定對象數組的指定範圍進行排序。

以上方法以int類型爲例,其餘的基本數據類型也有相應的重載方法。dom

練習

經常使用的方法ide

package com;

import java.util.Arrays;

public class ArraysTest {
    public static void main(String[] args) {
        int[] nums = {1, 3, 5, 4, 2};
        System.out.println("工具類輸出" + Arrays.toString(nums));
        Arrays.sort(nums);
        System.out.println("排序後輸出" + Arrays.toString(nums));
    }
}
package com.practise;

import java.util.Arrays;

/**
 * 請使用Arrays相關API,講一個隨機字符串的全部字符升序排序,
 * 並倒序打印  (倒序 forr)
 */
public class ArraysPractise {
    public static void main(String[] args) {
        String str = "dqwtjzfdas4523aklo";
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        for (int i = chars.length - 1; i >= 0; i--) {
            System.out.print(chars[i] + "\t");
        }
    }
}

Math類

概述

java.lang.Math 類包含用於執行基本數學運算的方法,如初等指數、對數、平方根和三角函數。函數

字段摘要

字段摘要
static double E 比任何其餘值都更接近 e(即天然對數的底數)的 double
static double PI 比任何其餘值都更接近 pi(即圓的周長與直徑之比)的 double 值。

靜態方法

方法摘要 描述
static int abs(int a) 返回 int 值的絕對值。 (long/float/double)
static int max(int a, int b) 返回兩個 int 值中較大的一個。(long/float/double)
static int min(int a, int b) 返回兩個 int 值中較小的一個。(long/float/double)
static double ceil(double a) 返回一個大於等於參數的最小double 值,並等於某個整數。 向上取整!
static double floor(double a) 返回一個小於等於參數的最大double 值,並等於某個整數。向下取整!
static int round(float a) 返回最接近參數的 int 四捨五入!
static long round(double a) 返回最接近參數的 long。
static double random() 返回帶正號的 double 值,該值大於等於 0.0 且小於 1.0。
static double pow(double a, double b) 返回第一個參數的第二個參數次冪的值。
static double sqrt(double a) 返回正確舍入的 double 值的正平方根。
static double cbrt(double a) 返回 double 值的立方根。

其餘方法

方法摘要 描述
static double copySign(double magnitude, double sign) 返回帶有第二個浮點參數符號的第一個浮點參數。
static float copySign(float magnitude, float sign) 返回帶有第二個浮點參數符號的第一個浮點參數。
static double cos(double a) 返回角的三角餘弦。
static double cosh(double x) 返回 double 值的雙曲線餘弦。
static double exp(double a) 返回歐拉數 e 的 double 次冪的值。
static double expm1(double x) 返回 ex -1。
static int getExponent(double d) 返回 double 表示形式中使用的無偏指數。
static int getExponent(float f) 返回 float 表示形式中使用的無偏指數。
static double hypot(double x, double y) 返回 sqrt(x2 +y2),沒有中間溢出或下溢。
static double IEEEremainder(double f1, double f2) 按照 IEEE 754 標準的規定,對兩個參數進行餘數運算。
static double log(double a) 返回 double 值的天然對數(底數是 e)。
static double log10(double a) 返回 double 值的底數爲 10 的對數。
static double log1p(double x) 返回參數與 1 之和的天然對數。
static double nextAfter(double start, double direction) 返回第一個參數和第二個參數之間與第一個參數相鄰的浮點數。
static float nextAfter(float start, double direction) 返回第一個參數和第二個參數之間與第一個參數相鄰的浮點數。
static double nextUp(double d) 返回 d 和正無窮大之間與 d 相鄰的浮點值。
static float nextUp(float f) 返回 f 和正無窮大之間與 f 相鄰的浮點值。
static double rint(double a) 返回最接近參數並等於某一整數的 double 值。
static double scalb(double d, int scaleFactor) 返回 d × 2scaleFactor,其舍入方式如同將一個正確舍入的浮點值乘以 double 值集合中的一個值。
static float scalb(float f, int scaleFactor) 返回 f × 2scaleFactor,其舍入方式如同將一個正確舍入的浮點值乘以 float 值集合中的一個值。
static double signum(double d) 返回參數的符號函數;若是參數爲 0,則返回 0;若是參數大於 0,則返回 1.0;若是參數小於 0,則返回 -1.0。
static float signum(float f) 返回參數的符號函數;若是參數爲 0,則返回 0;若是參數大於 0,則返回 1.0;若是參數小於 0,則返回 -1.0。
static double sin(double a) 返回角的三角正弦。
static double tan(double a) 返回角的三角正切。
static double sinh(double x) 返回 double 值的雙曲線正弦。
static double tanh(double x) 返回 double 值的雙曲線餘弦。
static double toDegrees(double angrad) 將用弧度表示的角轉換爲近似相等的用角度表示的角。
static double toRadians(double angdeg) 將用角度表示的角轉換爲近似相等的用弧度表示的角。
static double ulp(double d) 返回參數的 ulp 大小。
static float ulp(float f) 返回參數的 ulp 大小。
static double acos(double a) 返回一個值的反餘弦;返回的角度範圍在 0.0 到 pi 之間。
static double asin(double a) 返回一個值的反正弦;返回的角度範圍在 -pi/2 到 pi/2 之間。
static double atan(double a) 返回一個值的反正切;返回的角度範圍在 -pi/2 到 pi/2 之間。
static double atan2(double y, double x) 將矩形座標 (x, y) 轉換成極座標 (r, theta),返回所得角 theta。

練習

package com;

import org.opencv.core.Mat;

/**
 * Math 類經常使用的4+1
 * abs ceil floor round
 */
public class MathTest {
    public static void main(String[] args) {
        // 絕對值 (int/long/float/double)
        System.out.println(Math.abs(1.11));
        System.out.println(Math.abs(-1.11));
        System.out.println("===========");

        // 向上取整 只能double
        System.out.println(Math.ceil(1.0));
        System.out.println(Math.ceil(1.4));
        System.out.println(Math.ceil(1.6));
        System.out.println(Math.ceil(2.0));
        System.out.println("===========");

        // 向下取整 只能double
        System.out.println(Math.floor(1.0));
        System.out.println(Math.floor(1.4));
        System.out.println(Math.floor(1.6));
        System.out.println(Math.floor(2.0));
        System.out.println("===========");

        // 四捨五入 float -> int  , double -> long
        System.out.println(Math.round(1.0));
        System.out.println(Math.round(1.4));
        System.out.println(Math.round(1.6));
        System.out.println(Math.round(2.0));
        System.out.println("===========");

        // 字段
        System.out.println(Math.PI);
        System.out.println(Math.E);
    }
}

結果工具

1.11
1.11
===========
1.0
2.0
2.0
2.0
===========
1.0
1.0
1.0
2.0
===========
1
1
2
2
===========
3.141592653589793
2.718281828459045
package com.practise;

import java.util.Arrays;

/**
 * 計算再-10.8到5.9之間絕對值大於6或者小於2.1的整數有多少個?
 */
public class MathPractise {
    public static void main(String[] args) {
        double left = -10.8;
        double right = 5.9;
        int count = 0;
        for (int i = (int)left; i <= (int)right; i++) {
            int temp = Math.abs(i);
            if (temp > 6 || temp < 2.1) {
                count++;
            }
        }
        System.out.println("符合的有"+count+"個");
    }
}

Object類學習

概述

java.lang.Object類是Java語言中的根類,即全部類的父類。它的全部方法子類均可以使用。優化

在對象實例化的時候,最終找的父類就是Object。this

若是一個類沒有特別指定父類, 那麼默認則繼承自Object類。例如:

public class MyClass /*extends Object*/ {
  	// ...
}

根據JDK源代碼及Object類的API文檔,Object類當中包含的方法有11個。今天咱們主要學習其中的2個:

  • public String toString():返回該對象的字符串表示。
  • public boolean equals(Object obj):指示其餘某個對象是否與此對象「相等」。

toString方法

方法摘要

  • public String toString():返回該對象的字符串表示。

toString方法返回該對象的字符串表示,其實該字符串內容就是對象的類型+@+內存地址值。

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

因爲toString方法返回的結果是內存地址,而在開發中,常常須要按照對象的屬性獲得相應的字符串表現形式,所以也須要重寫它。

重寫toString方法

若是不但願使用toString方法的默認行爲,則能夠對它進行覆蓋重寫。例如自定義的Person類:

public class Person {  
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
    }

    // 省略構造器與Getter Setter
}

在IntelliJ IDEA中,能夠點擊Code菜單中的Generate...,也可使用快捷鍵alt+insert,點擊toString()選項。

選擇須要包含的成員變量並肯定。

小貼士: 在咱們直接使用輸出語句輸出對象名的時候,其實經過該對象調用了其toString()方法。

equals方法

方法摘要

  • public boolean equals(Object obj):指示其餘某個對象是否與此對象「相等」。

調用成員方法equals並指定參數爲另外一個對象,則能夠判斷這兩個對象是不是相同的。這裏的「相同」有默認和自定義兩種方式。

默認地址比較

若是沒有覆蓋重寫equals方法,那麼Object類中默認進行==運算符的對象地址比較,只要不是同一個對象,結果必然爲false。+

public boolean equals(Object obj) {
    return (this == obj);
}

==

  • 基本類型,兩值相等返回true

  • 引用類型,兩地址相等返回true

重寫equals方法

對象內容比較

若是但願進行對象的內容比較,即全部或指定的部分紅員變量相同就斷定兩個對象相同,則能夠覆蓋重寫equals方法。例如:

import java.util.Objects;

public class Person {	
	private String name;
	private int age;
	
    @Override
    public boolean equals(Object o) {
        // 若是對象地址同樣,則認爲相同
        if (this == o)
            return true;
        // 若是參數爲空,或者類型信息不同,則認爲不一樣
        if (o == null || getClass() != o.getClass())
            return false;
        // 轉換爲當前類型
        Person person = (Person) o;
        // 要求基本類型相等,而且將引用類型交給java.util.Objects類的equals靜態方法取用結果
        return age == person.age && Objects.equals(name, person.name);
    }
}

這段代碼充分考慮了對象爲空、類型一致等問題,但方法內容並不惟一。大多數IDE均可以自動生成equals方法的代碼內容。

在IntelliJ IDEA中,可使用Code菜單中的Generate…選項,也可使用快捷鍵alt+insert

並選擇equals() and hashCode()進行自動代碼生成。

tips:Object類當中的hashCode等其餘方法,從此學習。

Objects類

在剛纔IDEA自動重寫equals代碼中,使用到了java.util.Objects類,那麼這個類是什麼呢?

JDK7添加了一個Objects工具類,它提供了一些方法來操做對象,它由一些靜態的實用方法組成,

這些方法是null-save(空指針安全的)或null-tolerant(容忍空指針的),

用於計算對象的hashcode、返回對象的字符串表示形式、比較兩個對象。

在比較兩個對象的時候,Object的equals方法容易拋出空指針異常,而Objects類中的equals方法就優化了這個問題。方法以下:

  • public static boolean equals(Object a, Object b):判斷兩個對象是否相等。

咱們能夠查看一下源碼,學習一下:

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}
相關文章
相關標籤/搜索