此類包含用來操做數組(好比排序和搜索)的各類方法。此類還包含一個容許將數組做爲列表來查看的靜態工廠。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
|
根據指定比較器產生的順序對指定對象數組進行排序。 |
static
|
根據指定比較器產生的順序對指定對象數組的指定範圍進行排序。 |
以上方法以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"); } } }
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)
:指示其餘某個對象是否與此對象「相等」。public String toString()
:返回該對象的字符串表示。toString方法返回該對象的字符串表示,其實該字符串內容就是對象的類型+@+內存地址值。
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
因爲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()方法。
public boolean equals(Object obj)
:指示其餘某個對象是否與此對象「相等」。調用成員方法equals並指定參數爲另外一個對象,則能夠判斷這兩個對象是不是相同的。這裏的「相同」有默認和自定義兩種方式。
若是沒有覆蓋重寫equals方法,那麼Object類中默認進行==
運算符的對象地址比較,只要不是同一個對象,結果必然爲false。+
public boolean equals(Object obj) { return (this == obj); }
==
基本類型,兩值相等返回true
引用類型,兩地址相等返回true
對象內容比較
若是但願進行對象的內容比較,即全部或指定的部分紅員變量相同就斷定兩個對象相同,則能夠覆蓋重寫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等其餘方法,從此學習。
在剛纔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)); }