此类包含用来操做数组(好比排序和搜索)的各类方法。此类还包含一个容许将数组做为列表来查看的静态工厂。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)); }